JS 正則 /g 注意事項
js中正則表達式的全局匹配模式 /g用法詳細
瞎扯
使用正則表達式來做表單驗證的時候,遇到如下一個鬼東西, 匹配正則的時候,同樣的數據, 一次
true
, 一次false
. 坑死爹啊.
到底是什么坑爹的問題導致的吧. 研究發現 是/g
的鬼問題
var str = "123#abc";
var re = /abc/ig;
console.log(re.test(str)); //輸出ture
console.log(re.test(str)); //輸出false
console.log(re.test(str)); //輸出ture
console.log(re.test(str)); //輸出false
在創建正則表達式對象時如果使用了“g”標識符或者設置它了的global屬性值為ture時,那么新創建的正則表達式對象將使用模式對要將要匹配的字符串進行全局匹配。在全局匹配模式下可以對指定要查找的字符串執行多次匹配。每次匹配使用當前正則對象的lastIndex屬性的值作為在目標字符串中開始查找的起始位置。 lastIndex屬性的初始值為0,找到匹配的項后lastIndex的值被重置為匹配內容的下一個字符在字符串中的位置索引,用來標識下次執行匹配時開始查找的位置。如果找不到匹配的項lastIndex的值會被設置為0。 當沒有設置正則對象的全局匹配標志時lastIndex屬性的值始終為0,每次執行匹配僅查找字符串中第一個匹配的項。可以通下面的代碼來查看在執行匹配相應的lastIndex 屬性的值。
var str = "123#abc";
var re = /abc/ig;
console.log(re.test(str)); //輸出ture
console.log(re.lastIndex); //輸出7
console.log(re.test(str)); //輸出false
console.log(re.lastIndex); //輸出0
console.log(re.test(str)); //輸出ture
console.log(re.lastIndex); //輸出7
console.log(re.test(str)); //輸出false
console.log(re.lastIndex); //輸出0
修飾符
修飾符 | 描述 |
---|---|
i | 執行對大小寫不敏感的匹配。 |
g | 執行全局匹配(查找所有匹配而非在找到第一個匹配后停止)。 |
m | 執行多行匹配。 |
方括號
方括號用於查找某個范圍內的字符:
表達式 | 描述 |
---|---|
[abc] | 查找方括號之間的任何字符。 |
[^abc] | 查找任何不在方括號之間的字符。 |
[0-9] | 查找任何從 0 至 9 的數字。 |
[a-z] | 查找任何從小寫 a 到小寫 z 的字符。 |
[A-Z] | 查找任何從大寫 A 到大寫 Z 的字符。 |
[A-z] | 查找任何從大寫 A 到小寫 z 的字符。 |
[adgk] | 查找給定集合內的任何字符。 |
[^adgk] | 查找給定集合外的任何字符。 |
(red|blue|green) | 查找任何指定的選項。 |
元字符
元字符(Metacharacter)是擁有特殊含義的字符:
元字符 | 描述 |
---|---|
. | 查找單個字符,除了換行和行結束符。 |
w | 查找單詞字符。 |
W | 查找非單詞字符。 |
d | 查找數字。 |
D | 查找非數字字符。 |
s | 查找空白字符。 |
S | 查找非空白字符。 |
b | 查找位於單詞的開頭或結尾的匹配。 |
B | 查找不處在單詞的開頭或結尾的匹配。 |
查找 | NUL 字符。 |
n | 查找換行符。 |
f | 查找換頁符。 |
r | 查找回車符。 |
t | 查找制表符。 |
v | 查找垂直制表符。 |
xxx | 查找以八進制數 xxx 規定的字符。 |
xdd | 查找以十六進制數 dd 規定的字符。 |
uxxxx | 查找以十六進制數 xxxx 規定的 Unicode 字符。 |
量詞
量詞 | 描述 |
---|---|
n+ | 匹配任何包含至少一個 n 的字符串。 |
n* | 匹配任何包含零個或多個 n 的字符串。 |
n? | 匹配任何包含零個或一個 n 的字符串。 |
n{X} | 匹配包含 X 個 n 的序列的字符串。 |
n{X,Y} | 匹配包含 X 或 Y 個 n 的序列的字符串。 |
n{X,} | 匹配包含至少 X 個 n 的序列的字符串。 |
n$ | 匹配任何結尾為 n 的字符串。 |
^n | 匹配任何開頭為 n 的字符串。 |
?=n | 匹配任何其后緊接指定字符串 n 的字符串。 |
?!n | 匹配任何其后沒有緊接指定字符串 n 的字符串。 |