其實,正則還是要靠自己多寫,這樣才能記住那些複雜的規則,推薦MDN的基礎篇及正美的博客,希望對你有幫助:
正則表達式
元字符匹配
\b 比如: 匹配hello
var reg = /\bhello\b/;
console.log(reg.test('hello')); // true
字符轉義
\.或\* 比如: 匹配以*開頭的字符串
var reg = /^\*\w*/;
console.log(reg.test('*123&dkkfwe')); // true
字符類
\d 跟 [0-9] 表示只能爲數字;
\w 跟 [0-9a-zA-Z] 表示只能爲字母數字;
[?!.]表示匹配(.或?或!)
重複
+ 表示1次或多次
* 表示重複多次或零次
? 表示重複零次或一次
{n} 表示重複n次
{n, m} 表示重複n到m次
{n,} 表示重複那次或多次
分支條件
| 表示分支符,表示條件分支,分支的規則是從左至右;
分組
小括號來指定子表達式(也叫做分組),比如:
var reg = /(\d{1,3}\.){3}/;
reg.test('256.127.234.'); // true
反義
\W 表示匹配任意不是字母、數字、下劃線、漢字的字符
\D 匹配任意非數字的字符
\S 匹配任意不是空白符的字符
\B 匹配任意不是單詞開頭或結束的位置
[^\x] 匹配除了x以外的任意字符
捕獲性分組和非捕獲性分組
並不是所有分組都能創建反向引用,有一種特別的分組稱之爲非捕獲性分組,反之則爲捕獲性分組;比如:
// 非捕獲行分組
var color = '#999999';
var result = /#(?:\d+)/.test(color);
console.log(RegExp.$1); // ''
// 捕獲性分組
var color1 = '#888888';
var result2 = /#(\d+)/.test(color1);
console.log(RegExp.$1); // 888888
非捕獲分組,只是用來匹配,並不會提取分組內容。也就是說,如果我們只想用圓括號將一些字符用數量詞修飾,並不需要這個分組的內容,這就是非捕獲分組。
正向前瞻與負向前瞻
這兩個都是分組內的一些條件:
(?=exp) 正向前瞻,匹配exp前面的位置
(?!exp) 負向前瞻,匹配exp後面不是exp的位置