什麼是 RegExp 呢?如何撰寫呢?
正則表達式(RegExp , regular expression) 用於確認字串是否符合所定義的規則。例如:輸入身份證號碼時,它的規則爲首字爲字母,後緊接著九個數字。又或是生日格式年份若爲民國則爲兩個數字;若爲西元則爲四個數字。利用常規表達式可以簡單的驗證字串格式。
一般使用斜槓表示開始及結束。
var firstRegExp = /a/;
在進入規則語法之前,先介紹正則表達式的一個簡單的測試方法 test( )
。test ( )
方法用以表示參數字串是否符合正則表達式的字串格式。
var firstRegExp = /a/;
console.log(firstRegExp.test('abccc')); //true
上述範例建立一個正則表達式,規則爲含有 a 字元即可。檢測字串 'abccc',結果爲 true。
var startRegExp = /^ab/;
console.log(startRegExp.test('abccc')); //true
console.log(startRegExp.test('cccab')); //false
var endRegExp = /ab$/;
console.log(endRegExp.test('abccc')); //false
console.log(endRegExp.test('cccab')); //true
.
表示任意單個字元,除了以下幾個行結束符以外 \n
\r
\u2028
或 \u2029
。var dotRegExp = /a.b/;
console.log(dotRegExp.test('acb')); //true
console.log(dotRegExp.test('accb')); //false
\d
代表任意數字,也等同於 [0~9]
;反之,\D
代表除了數字以外的字元,也等同於 [^0~9]
。其中 [^]
內的皆爲不要的條件。var numRegExp = /\d/;
console.log(numRegExp.test('123')); //true
console.log(numRegExp.test('ccc')); //false
\w
代表所有字母、數字及底線,也等同於 [A-Za-z0-9_]
;反之,\W
代表除了所有字母、數字及底線以外的字元,也等同於 [^A-Za-z0-9_]
。var mixRegExp = /\w/;
console.log(mixRegExp.test('1s3_')); //true
console.log(mixRegExp.test('?')); //false
\s
代表任何空白字元,包含換行、換頁符等,也等同於 [ \f\n\r\t\v]
;反之,\S
代表除了任何空白字元,包含換行、換頁符等以外的字元,也等同於 [^ \f\n\r\t\v]
。其中 \f
代表換頁符,在文件中表示另起一頁;\n
代表換行鍵,即換到下一行;\r
代表回車鍵,即回到行首;\t
代表 tab 鍵,在文件中代表推進到下一個定位點;\v
代表垂直製表符,與 tab 有點像,只是方向不同。|
,滿足其中一個條件即可。var orRegExp = /a|b/;
console.log(orRegExp.test('acc')); //true
console.log(orRegExp.test('ccb')); //true
console.log(orRegExp.test('ccc')); //false
-
代表連續的字符,爲一種簡易的縮寫方式。例如數字 1~5,可以寫成 [1–5]。例如英文字 b~g,可以寫成 [b–g]。注意連字符的使用一定要搭配方括號,否則會被解讀爲普通字元。var continuousRegExp = /[1-5]/;
var nocontinuousRegExp = /1-5/;
console.log(continuousRegExp.test('2')); //true
console.log(nocontinuousRegExp.test('2')); //false
{}
:使用大括號指定次數,{n}
只有一個數字代表指定次數;{n,m}
兩個數字時,代表介於 n~m 次;省略其中一個數字代表只指定下限或上限,例如 {n,}
代表至少 n 次,{,m}
代表低於 m 次。var countRegExp = /a{1,5}/;
console.log(countRegExp.test('abaaa')); //true
console.log(countRegExp.test('bbbbb')); //false
?
:代表0或1次var qRegExp = /a?/;
console.log(qRegExp.test('abbbb')); //true
console.log(qRegExp.test('bbbbb')); //true
*
:代表0或多次var starRegExp = /a*/;
console.log(starRegExp.test('abbbb')); //true
console.log(starRegExp.test('aaabb')); //true
console.log(starRegExp.test('bbbbb')); //true
+
:代表出現只少一次,等同於{1, }var addRegExp = /a+/;
console.log(addRegExp.test('abbbb')); //true
console.log(addRegExp.test('aaabb')); //true
console.log(addRegExp.test('bbbbb')); //false
6.修飾符:
g
修飾符:欲使比較對象爲字串全部時可以加上 g 修飾符,否則在一般狀況下可能只比較第一個符合的對象就停止了。i
修飾符:表示比較條件不分大小寫var testRegExp = /HELLO/;
console.log(testRegExp.test('hello')); //false
var testRegExp2 = /HELLO/i;
console.log(testRegExp2.test('hello')); //true
m
修飾符:表示比較條件可以區分換行var testRegExp = /y$/;
console.log(testRegExp.test('hello my puppy\n')); //false
var testRegExp2 = /y$/m;
console.log(testRegExp2.test('hello my puppy\n')); //true
1.match()
:回傳比對後符合的結果陣列,若無符合對象,回傳 null
var aString = "hellomypuppy";
var aRegExp =/\d{1}/;
console.log(aString.match(aRegExp)); //null
var aRegExp2 =/\w/g;
console.log(aString.match(aRegExp2));
//["h", "e", "l", "l", "o", "m", "y", "p", "u", "p", "p", "y"]
search()
:回傳搜尋第一個比對後符合結果的位置,如果沒有任何符合結果,就回傳 -1var aString = "hellomypuppy";
var aRegExp =/\d{1}/;
var aRegExp2 =/h/;
console.log(aString.search(aRegExp));//-1
console.log(aString.search(aRegExp2));//0
replace()
:替換比對後符合的值。接收兩個參數,第一個參數爲正則表達式,第二個參數爲欲替換的值。var aString = "hellomypuppy";
var aRegExp =/\d/;
var aRegExp2 =/\w/;
console.log(aString.replace(aRegExp,1)); //hellomypuppy,沒有符合對象,所以不變
console.log(aString.replace(aRegExp2,1)); //1ellomypuppy
如果想要替換所有符合對象,就加上修飾符 g
var aRegExp3 =/\w/g;
console.log(aString.replace(aRegExp3,1)); //111111111111
以上是今天關於正則表達式的基礎理解,更多的撰寫方式可以參考 MDN,今天最大的收穫應該是以後看到正則表達式不會覺得是文言文了!如果記不起來查表也看得懂了,可喜可賀:) 耶~~~~~~