match方法是JS的字符串方法,詳細說明可以看MDN的說明。
如果正則表達式匹配成功的話,match方法會返回一個數組,而數組里的數據有兩種形式,對應着匹配方式:全局匹配與非全局匹配。
1. 全局匹配
全局匹配時,數組里的數據是匹配到的所有符合正則表達式的字符串。
2.非全局匹配
非全局匹配時,數據里的數據則是第一個匹配的值以及正則表達式的子分組匹配到的值,再附加上三個屬性:
groups:一個捕獲組數組或者 undefined(如果沒有定義命名捕獲組)。
index:匹配結果的開始位置。
input:進行匹配的原字符串。
例子:
var patt = /\(([a-z]*([\d]*)[a-z]*)\)/; var pattg = /\(([a-z]*([\d]*)[a-z]*)\)/g; var testStr = '(aaaaa11111(bbbbbb2222222bbaa)bbb(sss333sss)asdbas123bd)'; var result = testStr.match(patt); var resultg = testStr.match(pattg); console.log(result); //=> ["(bbbbbb2222222bbaa)", "bbbbbb2222222bbaa", "2222222", index: 11, input: "(aaaaa11111(bbbbbb2222222bbaa)bbb(sss333sss)asdbas123bd)", groups: undefined] console.log(resultg); //=> ["(bbbbbb2222222bbaa)", "(sss333sss)"]
打印出來的兩個結果在chrome瀏覽器控制台看是這樣的:
第一個結果是非全局匹配的,可以看到數組中原有三個數據,而這三個數據對應着正則表達式的三層分組:第一層是 \(([a-z]*([\d]*)[a-z]*)\) ,第二層是 ([a-z]*([\d]*)[a-z]*) ,第三層是 ([\d]*) 。(不清楚正則表達式分組的童鞋請自行了解,或查看參考鏈接。)
第二個結果是全局匹配的,就是匹配正則表達式的所有結果。
參考鏈接:
1. MDN上的說明
2. w3school上的說明
4. 正則表達式的分組