1.js創建正則表達式
js創建正則表達式有2種方式
1.顯示的使用Regex對象,
var regex = new Regex("\\d*","img");
2.採用純文本的寫法
var regex = /\d*/img;
上面2種寫法是等價的,
由於JavaScript字符串中的“\”是一個轉義字符,因此,使用顯式構造函數創建RegExp實例對象時,應將原始正則表達式中的“\”用“\\”替換
2.正則表達式的定義
js正則表達式是perl5正則表達式語法的子集,有些perl5的正則語法並不被支持如:\a,\e,\l,\u等,(?<=)正向後行斷言和(?<!)負向後行斷言,(?)的語法等。
正則表達式的模式規則是由一個字符序列組成的,包括字母,數字和符號,通常匹配都是按照字符的字面含義匹配,但是還有些特殊語義的字符比如 \d匹配所有數字,特殊語義的字符讓正則的功能更爲強大。
3.正則表達式的字符類
字符 | 匹配 |
---|---|
[…] | 中括號內任意的字符,例如[abc]表示匹配abc中的一個 |
[^…] | 除了中括號內任意的字符,例如[^abc]表示匹配不在abc中的任意一個字符 |
. | 點表示任意字符 |
\w | 等價於[a-zA-Z0-9] |
\W | 等價於[^a-zA-Z0-9] |
\s | 任何unicode 空白符 |
\S | 任何非unicode 空白符 |
\d | 等價於[0-9] |
\D | 等價於[^0-9] |
\n | 換行符 |
\r | 回車 |
\t | 製表符 |
3.正則表達式的重複字符語法
字符 | 含義 |
---|---|
{n,m} | 前一項至少匹配n次,最多匹配m次 |
{n,} | 前一項至少匹配n次,或更多次 |
{n} | 前一項匹配n次 |
? | 前一項0次或者一次,至多一次 |
+ | 前一項匹配1次或多次 |
* | 匹配0次或多次 |
當我們匹配重複的字符串時,用以上例子,它會盡量的多去匹配,我們稱之爲貪婪匹配,如果要儘可能少的匹配我們稱之爲非貪婪匹配,非貪婪在前面的字符的基礎上加上?,例如{1,6}?,??,+?,*?,
例如
<script>
var regex1 = /a+?/;
var regex2 = /a+/;
var str = "aaaa";
console.info(regex1.exec(str));
console.info(regex2.exec(str));
</script>
匹配結果爲 a,aaaa,非貪婪會盡可能的少匹配,這有時可能不是我們想要的結果
4.選擇,引用,分組
4.1 選擇
正則表達式的語法中,"|" 可用來表達選擇項,選擇項會從左到右,一旦匹配,會忽略其他匹配項,例如 /a|ab|abc/ ,字符串"abc",匹配的結果是a,
4.2 分組,引用
正則表達式的圓括號"()"有多個作用,其中一個就是可以把單獨的項作爲一個子表達式,以便可以用重複的字符作用一個整體,例如 /a(bc)+/,表示匹配 a後面跟多個bc項,當目標字符串和正則表達式匹配之後,圓括號匹配的結果,會單獨存貯起來,稱爲組,我們在正則表達式中,可以通過,\n,n表示數字,這個數字代表帶圓括號的子表達式在正則表達式中的位置,可以單獨引用這個組,例如 /(\d)+a\1/,會匹配以a爲中心,左右2邊一樣的字符串。分組可以嵌套:當嵌套分組存在時,每個組的序號是從左往右,左括號的位置, 例如表達式
/(ab)*((\d+) | abc)+(\w?)/
第一個組爲:(ab)
第二個組爲:((\d+) | abc)
第三個組爲:(\d+)
第四個組爲:(\w?)
如果不想分組被引用可以使用(?:…)該表示只是分組,但是不會保存匹配的項,例如
/(?:ab)*((\d+) | abc)+(\w?)/
\1表示((\d+) | abc)匹配的項
\2表示(\d+)匹配的項
\3表示(\w?)匹配的項
5.匹配的位置
正則表達式中有一類元素只匹配字符間的位置,而不是字符
字符 | 含義 |
---|---|
^ | 匹配字符串開頭,多行中,匹配一行的開頭 |
$ | 匹配字符串的結尾,多行中,匹配一行的結尾 |
\b | 退格符直接量,匹配單詞邊界,就是用在你匹配整個單詞的時候,\b只是匹配字符串開頭結尾及空格回車等的位置, 不會匹配空格符本身,很多人把\b和\s搞混了,\b只會匹配位置,不會匹配空格符本身。 |
\B | 匹配非單詞邊界的位置 |
(?=p) | 接下來的字符要求和p表達式匹配,匹配的結果不會包含p匹配的部分 |
(?!p) | 要求接下來的字符都不和p匹配,也只是匹配位置 |
例如 /abc(?=\d*)/ 有字符串"abc1234",匹配結果是abc,
6.修飾符
字符 | 含義 |
---|---|
i | 忽略大小寫 |
g | 執行一個全局匹配,而不是找到一個匹配就返回,此處應瞭解,每一個表達式中有一個lastIndex屬性,從0位置開始,如果爲全局匹配模式,匹配成功,lastIndex將指向下一個將要匹配的字符索引的位置,如果失敗將重置爲0,如果不爲全局匹配模式,無論成功失敗都將重置爲0 |
m | 多行匹配模式 |