溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JS正則表達式詳解

發(fā)布時間:2020-07-30 07:38:07 來源:網(wǎng)絡(luò) 閱讀:2265 作者:web_0315 欄目:web開發(fā)

1.正則語法規(guī)則

[xyz]

字符集,匹配任何一個包含的字符

[^xyz]

否定字符集,匹配未包含的字符

\w

數(shù)字字母下劃線

\W

非數(shù)字字母下劃線

\s

空白字符

\S

非空白字符

\d

匹配數(shù)字

\D

匹配非數(shù)字

\b

單詞開頭或結(jié)束的位置

\B

非單詞開頭或結(jié)束的位置

^

開始位置

$

結(jié)束位置

示例:簡易郵箱匹配

var r = /[\w.-]@[\w.-]/
//或者
var r = new RegExp('[\w.-]@[\w.-]','');

var emali = '@'
console.log(r.test(emali)); //false

var emali = 'web@qq'
console.log(r.test(emali)); //true


2.重復(fù)

* 代表匹配0次或多次
+ 代表匹配1次或多次
? 代表匹配0次或1次
{n} 指定匹配次數(shù)
{n,} 匹配n次或更多
{n,m} 匹配n到m次
var r = /^[\w.]+@[\w.]+$/
r.test('web@qq.com')    //true


3.屬性flags

source          --s 正則的原始字符串形式
ignoreCase   --i 忽略大小寫
global           --g 全局匹配,匹配后不中止
multiline        --m 如果字符串有換行,按多行匹配


4.方法

1.test() 方法,測試指定字符串是否滿足對應(yīng)的正則規(guī)則
2.exec() 方法,返回匹配內(nèi)容等信息組成的對象
3.match() 方法,這是一個字符串的方法,與exec方法作用類似,區(qū)別是對g的解釋不通,exec方法使用g標(biāo)記時需要多次遍歷,match方法回一次返回所有匹配內(nèi)容
//如下:
var target = 'bg.jpg index.html app.js index.css test.jpg';
var r = /(\w+)\.jpg/g;

//match方法
console.log(target.match(r));
//結(jié)果
//(2) ["bg.jpg", "test.jpg"]

//exec方法
console.log(r.exec(target));
console.log(r.exec(target));
//結(jié)果
//(2) ["bg.jpg", "bg", index: 0, input: "bg.jpg index.html app.js index.css test.jpg", groups: undefined]
//(2) ["test.jpg", "test", index: 35, input: "bg.jpg index.html app.js index.css test.jpg", groups: undefined]


5.分組與捕獲

1.分組的用法:

//普通寫法
var r = /123123123/;
console.log(r.exec("20191231231232019"));

//分組的寫法
var r = /(123){3}/
console.log(r.exec("20191231231232019"));

//除了上面的使用場景,還可以用來做'或'匹配
var r = /hello (world|js)/;
console.log(r.test("hello world"));    //true
console.log(r.test("hello js"));    //true


2.那么什么是捕獲呢?看下面這個例子

使用了分組的表達式返回時除了匹配到的完整內(nèi)容,還帶有了捕獲到哪些字符串

JS正則表達式詳解

3.非捕獲型分組

var r = /(web) say hello (world|js)/;
console.log(r.exec("web say hello world"));
//返回值 (3) ["web say hello world", "web", "world", index: 0, input: "web say hello world", groups: undefined]
//這里的world其實不需要捕獲,只是用來做一個或匹配的

var r = /(web) say hello (?:world|js)/;
console.log(r.exec("web say hello world"));
//返回值 (2) ["web say hello world", "web", index: 0, input: "web say hello world", groups: undefined]
//這就是非捕獲型匹配


6.貪婪匹配與惰性匹配

var str = '<span>abc</span><span>qwe</span>';
var r = /<span>.*<\/span>/;

r.exec(str);
//執(zhí)行結(jié)果
["<span>abc</span><span>qwe</span>", index: 0, input: "<span>abc</span><span>qwe</span>", groups: undefined]
//匹配了最長路徑,如果我們只想匹配到前面一部分,需要使用惰性匹配

var str = '<span>abc</span><span>qwe</span>';
var r = /<span>.*?<\/span>/;

r.exec(str);
//執(zhí)行結(jié)果
["<span>abc</span>", index: 0, input: "<span>abc</span><span>qwe</span>", groups: undefined]
//在重復(fù)量詞后面加一個?,代表使用惰性匹配,盡可能短的匹配


7.正向前瞻/負(fù)向前瞻

var target = 'bg.jgp index.html app.js index.css test.jpg'
//從以上字符串中找出以jpg結(jié)尾的文件名,這里就需要用到正向前瞻了

var r = /\b(\w+)\.jpg/g;
console.log(target.match(r));
//["bg.jpg", "test.jpg"]
var r = /\b(\w+)(?=\.jpg)/g;
console.log(target.match(r));
//["bg", "test"]
//正向前瞻語法(?=) 負(fù)向前瞻語法(?!)
//正向前瞻表示必須后面跟有指定字符才算匹配成功,負(fù)向前瞻相反,必須不匹配指定字符才算匹配成功


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI