推薦一個網站,檢測你的正則 網站連接javascript
var pattern = /s$/
複製代碼
var pattren = new RegExp('s$')
複製代碼
字符 | 匹配 |
---|---|
[..] | 包含括號內的任意字符 |
[^..] | 不在括號裏的任意字符 |
\w | 合法字符,包含數字字母以及_等,我看權威指南寫的其等價於[a-zA-Z0-9],但其實並非,\w對_也合理 |
\W | 等價非法字符 |
\s | 空白符 |
\S | 非空白符號 |
\d | 等價[0-9] |
\D | 等價[^0-9] |
注意:如下這個列表匹配的重複字符是儘量多的匹配java
字符 | 匹配 |
---|---|
{n,m} | 最少n個,不能超過m個 |
{n,} | 大於等於n次 |
{n} | n次 |
? | 0個或者1個,說明該項是可有可沒有 |
+ | 出現次數大於等於1次 |
* | 出現次數0次或者屢次 |
示例正則表達式
let a = 'hhhh'
a.match(/[h]+/)
//得出結果:hhhh
複製代碼
這個就至關於在貪婪重複字符的後三個後面加了個?號數組
字符 | 匹配 |
---|---|
?? | 0個或者1個,儘量少的匹配 |
+? | 1個或者多個,儘量少的匹配 |
*? | 0個或者多個,儘量少的匹配 |
示例函數
let a = 'hahahaha'
a.match(/[h]+?/)
//得出結果:["h","h","h","h"]
複製代碼
字符 | 匹配 |
---|---|
| | 或 |
(...) | 將括號內的字符看做一個單元,這個單元可經過*,+,?, |
(?:...) | 只組合,但不記憶與該組相匹配的字符 |
\n | 和第n個分組匹配的字符 |
字符 | 匹配 |
---|---|
^ | 匹配字符串的開頭 |
$ | 匹配字符串結尾 |
\b | 匹配單詞邊界 |
\B | 匹配非單詞的邊界 |
(?=p) | 匹配的字符要與p匹配,但不能包括匹配p的那些字符 |
(?!p) | 匹配的字符要不與p匹配 |
字符 | 匹配 |
---|---|
g | 全局 |
i | 不分大小寫 |
m | 多行匹配 |
其參數是正則表達式,若是不是正則表達式,首先經過new RegExp()轉換爲正則表達式,其返回的是第一個與之匹配的子串的起始位置,若是找不到返回的-1網站
"Javacript".search(/script/) //4
複製代碼
第一個參數是正則表達式用以匹配字符串,第二個參數是進行替換的字符串。默認只替換第一個匹配的子字符串,若是想全局替換,第一個參數加上/g修飾符ui
'javascriptscript'.replace(/script/, 'haha')//"javahahascript"
'javascriptscript'.replace(/script/g, 'haha')//"javahahahaha"
複製代碼
有一個特殊的地方,若是在替換的字符中出現$加數字,那麼replace()將用與指定的子表達式相匹配的文原本替換這個字符串this
let string2 = "'' '哈哈' 'this is' 'nono'"
let reg = /'([^']*)'/g
string2.replace(reg, "「$1」")//"「」 「哈哈」 「this is」 「nono」"
var str = 'X98Y87Z65';
var reg = /^X(\d+)Y(\d+)Z(\d+)$/; // 三個數字部分加了小括號,表示子表達式
reg.test(str); // 此處使用exec()等其餘正則表達式的匹配方法也能夠
console.log(RegExp.$1); // 98
console.log(RegExp.$2); // 87
console.log(RegExp.$3); // 65
複製代碼
這裏$1我以爲很重要url
參數是一個正則表達式,返回的是一個由匹配結果組成的數組,若是加了修飾符/g,則該數組的內容是全部知足條件的子字符串,若是沒有加修飾符,只會檢索第一個匹配的字符串,且返回的也是一個數組。若是沒有找到匹配結果返回nullspa
let string3 = "1 and 2 and 3"
string3.match(/\d/g)//["1", "2", "3"]
string3.match(/\d/)//["1", index: 0, input: "1 and 2 and 3", groups: undefined]
複製代碼
將字符串拆分爲一個子串組成的數組
和String的match()方法很像,只是其參數是一個字符串,exec的正則表達式無論具不具備全局修飾符/g,它老是返回一個匹配結果。可是加上了/g後,其會將當前正則表達式對象的lastIndex屬性設置爲緊挨着匹配子串的字符位置,能夠看下圖
let string1 = "Hello Hello Hello"
let reg2 = /Hello/
reg2.exec(string1)//["Hello", index: 0, input: "Hello Hello Hello", groups: undefined]
let reg = /Hello/g;
reg.exec(string1)//["Hello", index: 0, input: "Hello Hello Hello", groups: undefined]
複製代碼
其參數也是字符串,其匹配後的結果爲true或false
let url = "url(http://www.baidu.com/01.png)"
let reg = /url\(([^\)]+)\)$/
console.log(url.replace(reg, '$1'))
複製代碼
let reg3 = /[a-z]+:\/\/[a-z]+/
console.log(reg3.test('http://aa.com'))
複製代碼
let reg2 = /^[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z]+/
複製代碼
let reg4 = /^\s+|\s+$/g
console.log(' hahaha '.replace(reg4, ''))
複製代碼