js正則表達式的簡單使用

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 多行匹配模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章