特殊字符转义(小写!)
\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
分组与引用
通过括号对正则表达式进行分组。
分组两个作用:一是重复,而是引用。
\ $
匹配位置
(?= ) 预查 指定匹配字符串接下来应该出现的匹配串
如:/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字符。
匹配中文字符的正则表达式: [u4e00-u9fa5]
匹配双字节字符(包括汉字在内):[^x00-xff]
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串
(?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
怎样查看自己的正则表达式是否写对(检查转义字符是否写对),可以查看正则表达式对象的.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>这是用正则表达式/" + 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>