標籤:jsp 語言 空白 clear cells 條件 表達 取子串 成功
字串是編程時涉及到的最多的一種資料結構,對字串進行操作的需求幾乎無處不在。 Regex是一種用來匹配字串的強有力的武器。它的設計思想是用一種描述性的語言來給字串定義一個規則,凡是符合規則的字串,我們就認為它“匹配”了。
\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!‘
Regex量詞:
*
表示任意個字元(包括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個字元)
[]
中的
^
表示排除某個字元
[^#?]
表示除了?和#的所有字元
()表示捕獲型分組,可以將匹配的字串進行
分組,提取子串。 如果Regex中定義了組,就可以在
RegExp
對象上用
exec()
方法提取出子串來。
exec()
匹配成功後,返回一個
Array
,第一個元素是Regex匹配到的整個字串,後面的字串表示匹配成功的子串。
exec()
匹配失敗時返回
null
。
^(\d{3})-(\d{3,8})$
分別定義了兩個組,可以直接從匹配的字串中提取出區號和本地號碼:
123 |
var re = /^(\d{3})-(\d{3,8})$/; re.exec( ‘010-12345‘ ); // [‘010-12345‘, ‘010‘, ‘12345‘] re.exec( ‘010 12345‘ ); // null |
(?:) 分組不想被捕獲的時候使用,可以提高程式執行速度,非捕獲型分組不會干擾捕獲型分組編號。 用Regex切分字串比用固定的字元更靈活
1 |
‘a,b;; c d‘ .split(/[\s\,\;]+/); // [‘a‘, ‘b‘, ‘c‘, ‘d‘] |
RegExp對象的
test()
方法用於測試給定的字串是否符合條件。
var re = /^\d{3}\-\d{3,8}$/;re.test(‘010-12345‘); // truere.test(‘010-1234x‘); // false
需要特別指出的是,正則匹配預設是
貪婪匹配,也就是匹配儘可能多的字元。
var re = /^(\d+)(0*)$/;re.exec(‘102300‘); // [‘102300‘, ‘102300‘, ‘‘]
由於
\d+
採用貪婪匹配,直接把後面的
0
全部匹配了,結果
0*
只能匹配Null 字元串了。
加個?
就可以讓\d+
採用非貪婪匹配:
var re = /^(\d+?)(0*)$/;re.exec(‘102300‘); // [‘102300‘, ‘1023‘, ‘00‘]
特殊標誌
g
標誌 ,表示全域匹配
i
標誌,表示忽略大小寫
m
標誌,表示執行多行匹配 需要使用轉義符‘ \ ‘的15個特殊字元/ \ [ ] ( ) { } ? + * | . ^ $
JavaScript中Regex判斷匹配規則以及常用的方法