特殊字元轉義(小寫!)
\w word 字母數字底線[a-zA-Z0-9_]
\s space 任何Unicode空白符 [\n\r\f\t\v]
\d decimal [0-9]
\b bound 單詞邊界 (/^JavaScript\b/ 與 “JavaScript is...”匹配,不與“JavaScript:alert('');”匹配)
重複
{n}
{m, n}
{m,} 重複次數大於m
分組與引用
通過括弧對Regex進行分組。
分組兩個作用:一是重複,而是引用。
\ $
匹配位置
(?= ) 預查 指定匹配字串接下來應該出現的匹配串
如:/JavaScript(?=hello)/ 匹配 “JavaScripthelloworld”中的JavaScript串
(?! ) 預查非
(?: ) 匹配但不擷取
標誌
m 多行模式比對 不加則只匹配單行結果 ^行首 $行尾
其他
\xn 匹配 n,其中 n 為十六進位轉義值。十六進位轉義值必須為確定的兩個數字長。
\num 匹配 num,其中num是一個正整數。對所擷取的匹配的引用。
\n 標識一個八進位轉義值或一個後向引用。如果 \n 之前至少 n 個擷取的子運算式,則 n 為後向引用。否則,如果 n 為八位元字 (0-7),則 n 為一個八進位轉義值。
\nm 標識一個八進位轉義值或一個後向引用。如果 \nm 之前至少有is preceded by at least nm 個擷取得子運算式,則 nm 為後向引用。如果 \nm 之前至少有 n 個擷取,則 n 為一個後跟文字 m 的後向引用。如果前面的條件都不滿足,若 n 和 m 均為八位元字 (0-7),則 \nm 將匹配八進位轉義值 nm。
\nml 如果 n 為八位元字 (0-3),且 m 和 l 均為八位元字 (0-7),則匹配八進位轉義值 nml。
\un 匹配 n,其中 n 是一個用四個十六進位數字表示的Unicode字元。
匹配中文字元的Regex: [u4e00-u9fa5]
匹配雙位元組字元(包括漢字在內):[^x00-xff]
? 當該字元緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 後面時,匹配模式是非貪婪的。非貪婪模式儘可能少的匹配所搜尋的字串,而預設的貪婪模式則儘可能多的匹配所搜尋的字串
(?:pattern) 匹配pattern 但不擷取匹配結果,也就是說這是一個非擷取匹配,不進行儲存供以後使用。
怎樣查看自己的Regex是否寫對(檢查逸出字元是否寫對),可以查看Regex對象的.source屬性。
範例程式碼
Code
<script language="javascript">
var strSrc = "xxa1b01c001yya2b02c002zz";
var re = /a(\d)b(\d{2})c(\d{3})/gi;
var arr, count = 0;
while ((arr = re.exec(strSrc)) != null) {
displayResult();
}
function displayResult() {
document.write("<p>這是用Regex/" + re.source + "/gi對字串<br>\"" + RegExp.input + "\"進行第" + (++count) + "次搜尋的結果:<br>");
document.write("RegExp.index為" + RegExp.index + "<br>");
document.write("RegExp.lastIndex為" + RegExp.lastIndex + "<br>");
document.write("RegExp.lastMatch為" + RegExp.lastMatch + "<br>");
document.write("RegExp.lastParen為" + RegExp.lastParen + "<br>");
document.write("RegExp.leftContext為" + RegExp.leftContext + "<br>");
document.write("RegExp.rightContext為" + RegExp.rightContext + "<br>");
document.write("RegExp.$1為" + RegExp.$1 + "<br>");
document.write("RegExp.$2為" + RegExp.$2 + "<br>");
document.write("RegExp.$3為" + RegExp.$3 + "<br>");
document.write("RegExp.$4為" + RegExp.$4 + "<br>");
document.write("arr.index為" + arr.index + "<br>");
document.write("arr.input為" + arr.input + "<br>");
document.write("arr.lastIndex為" + arr.lastIndex + "<br>");
document.write("返回數組的元素個數為" + arr.length + "<br>");
document.write("返回數組的內容為[");
for(var i=0; i<arr.length; i++){
if(i<arr.length-1)
document.write("\"" + arr[i] + "\",");
else
document.write("\"" + arr[i] + "\"]</p>");
}
}
</script>