一、中括號[]裡面的特殊字元是不用轉義的,例如[/]、[.]、[*]、[?]、[+]都是可以直接匹配對應的字元\ . *?+。下面是測試結果:
所以,/[\d.]/這個正規表示式實際上是匹配數字字元或者字元".",作用等同於/[\d\.]/
二、match()、exec()和test()的區別
1. regexp.test()
test()
方法執行一個檢索,用來檢視正規表示式與指定的字串是否匹配。返回 true
或 false
。
/in[a-z]/g.test("ing"); // true /in[a-z]/g.test("string"); //true var reg = new RegExp("in[a-z]", "g"); reg.test("string"); // true
2.regexp.exec(string)
如果成功匹配,exec
方法返回一個陣列,並且更新正規表示式物件的屬性。返回的陣列包括匹配的字串作為第一個元素,緊接著一個元素對應一個成功匹配被捕獲的字串。
另外,返回的陣列物件還包含index和input屬性:
- index表示被匹配的字串的第一個字元在源字串中的位置。
- input表示源字串。
var re = /in([a-z])in([a-z])/g; var result = re.exec("stringina strinaing"); //["ingina", "g", "a"] result .index; // 3 result .input; // "stringina strinaing"
物件 | 屬性/索引 | 描述 | 例子 |
result |
[0] |
上一次匹配到的字元 | ingina |
[1], ...[n ] |
括號中的分組捕獲 |
|
|
index |
匹配到的字元位於原始字串的基於0的索引值 | 3 |
|
input |
原始字串 |
stringina strinaing |
|
re |
lastIndex |
下一次匹配開始的位置 | 9 |
ignoreCase |
是否使用了'i'標記使正則匹配忽略大小寫 | false |
|
global |
是否使用了'g'標記來進行全域性的匹配. | true |
|
multiline |
是否使用了' |
false |
|
source |
正則模式的字串 | in([a-z])in([a-z]) |
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec
3. string.match(regexp)
match()返回一個被指定正則匹配到的匹配項陣列
如果正規表示式沒有 g
標誌,返回和 RegExp.exec(str)
相同的結果。
如果正規表示式包含 g
標誌,則該方法返回一個包含所有匹配結果的陣列。如果沒有匹配到,則返回 null
。
var reg = new RegExp('in([a-z])in([a-z])'); var result = "stringinastringinb".match(reg); // ["ingina", "g", "a"] result.index; // 3 result.input; // "stringinastringinb" var reg= new RegExp('in([a-z])in([a-z])','g'); var result ="stringinastringinb".match(reg); // ["ingina", "inginb"] result.index; // undefined result.input; // undefined
PS:另外要注意的是lastIndex只對exec()和test()方法起作用,string.match(regexp)是不會影響regexp這個正則的lastIndex屬性的。