【RegExp】JavaScript中正則表達式判斷匹配規則以及常用方法
阿新 • • 發佈:2017-08-03
返回 空字符串 tro true 正則表達式 str 本地 大小 表示範圍 字符串是編程時涉及到的最多的一種數據結構,對字符串進行操作的需求幾乎無處不在。 正則表達式是一種用來匹配字符串的強有力的武器。它的設計思想是用一種描述性的語言來給字符串定義一個規則,凡是符合規則的字符串,我們就認為它“匹配”了。
可以匹配任意字符 表示除了?和#的所有字符
表示的就是要提取的分組(Group)
如果正則表達式中定義了組,就可以在
\d
可以匹配一個數字 ‘00\d‘
可以匹配‘007‘
,‘\d\d\d‘
可以匹配‘010‘
\w
可以匹配一個字母或數字 ‘\w\w‘
可以匹配‘js‘
\s
可以匹配一個空格(也包括Tab等空白符)
\DWS
都是表示匹配與小寫字母相反的匹配關系
\數字n
表示指向分組n捕獲到的文本的一個引用,能夠再次被匹配 /(\d+)(0*)\1/
可以匹配‘22300223’
.
‘js.‘
可以匹配‘jsp‘
、‘jss‘
、‘js!‘
*
表示任意個字符(包括0個)
+
表示至少一個字符
?
表示0個或1個字符
{n}
表示n個字符
{n,m}
表示n-m個字符
A|B
可以匹配A或B (J|j)ava(S|s)cript
可以匹配‘JavaScript‘
、‘Javascript‘
、‘javaScript‘
或者‘javascript‘
^
表示行的開頭 ^\d
表示必須以數字開頭
$
表示行的結束 \d$
表示必須以數字結束
用[]
表示範圍
[]
中的^
表示排除某個字符 [^#?]
[a-zA-Z\_\$][0-9a-zA-Z\_\$]*
可以匹配由字母或下劃線、$開頭,後接任意個由一個數字、字母或者下劃線、$組成的字符串,也就是JavaScript允許的變量名
[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}
更精確地限制了變量的長度是1-20個字符(前面1個字符+後面最多19個字符)
用正則表達式切分字符串比用固定的字符更靈活
‘a,b;; c d‘.split(/[\s\,\;]+/); // [‘a‘, ‘b‘, ‘c‘, ‘d‘]
除了簡單地判斷是否匹配之外,正則表達式還有提取子串的強大功能。用
()
RegExp
對象上用exec()
方法提取出子串來。
exec()
匹配成功後,返回一個Array
,第一個元素是正則表達式匹配到的整個字符串,後面的字符串表示匹配成功的子串。
exec()
匹配失敗時返回null
。
^(\d{3})-(\d{3,8})$
分別定義了兩個組,可以直接從匹配的字符串中提取出區號和本地號碼:
var re = /^(\d{3})-(\d{3,8})$/; re.exec(‘010-12345‘); // [‘010-12345‘, ‘010‘, ‘12345‘] re.exec(‘010 12345‘); // null
RegExp對象的
test()
方法用於測試給定的字符串是否符合條件。
var re = /^\d{3}\-\d{3,8}$/; re.test(‘010-12345‘); // true re.test(‘010-1234x‘); // false
需要特別指出的是,正則匹配默認是貪婪匹配,也就是匹配盡可能多的字符。
var re = /^(\d+)(0*)$/; re.exec(‘102300‘); // [‘102300‘, ‘102300‘, ‘‘]
由於
\d+
采用貪婪匹配,直接把後面的0
全部匹配了,結果0*
只能匹配空字符串了。
加個?
就可以讓\d+
采用非貪婪匹配:
var re = /^(\d+?)(0*)$/; re.exec(‘102300‘); // [‘102300‘, ‘1023‘, ‘00‘]?: 不想被捕獲的時候使用,可以提高程序執行速度 比如 ([a-z][0-9])+ ,( ) 裏面的內容被捕獲了,如果寫成 (?:[a-z][0-9])+,整體匹配是一樣的, 就是不會捕獲 ( )裏內容。 特殊標誌
g
標誌 ,表示全局匹配
i
標誌,表示忽略大小寫
m
標誌,表示執行多行匹配【RegExp】JavaScript中正則表達式判斷匹配規則以及常用方法