正则学习笔记
文星家: ? * + 即 01次、0多次、1多次
^ 匹配起始端
$ 匹配结尾处
. 匹配任意单个字符,但换行符除外
(x) 匹配x并记住x,前提是匹配
(?:x) 匹配x但不记住x
X(?=y) 匹配x,仅当后面紧跟着y时。如果符合匹配,则只有x会被记住,y不会被记住。
X(?!y) 匹配x,仅当后面不紧跟着y时。如果符合匹配,则只有x会被记住,y不会被记住。
x|y 匹配x或y。注意如果x和y都匹配上了,那么只记住x。
{n} 匹配前一个字符的n次出现
{n,} 匹配前一个字符的至少n次出现
{n,m} 匹配前一个字符的至少n次最多m次的出现
[xyz] xyz表示一个字符串,该模式表示匹配[]中的一个字符,形式上[xyz]等同于[x-z]
[^xyz] 该模式表示匹配非[]中的一个字符,形式上[^xyz]等同于[^x-z]
[\b] 匹配退格键
\b 匹配一个词的边界符,例如空格和换行符等等,当然匹配换行符时,表达式应该附加参数m
var regx=/\bc./;
var rs=regx.exec(“Beijing is a beautiful city”);
结果:匹配成功,rs的值为:{ci},注意c前边的空格不会匹配到结果中,即{ ci}是不正确的。
\B 代表一个非单词边界。
\cX 匹配一个控制字符
\d 匹配一个数字字符,等同于[0-9]
\D 匹配一个非数字字符,等同于[^0-9]
\f 匹配一个换页符
\n 匹配一个换行符。因为是换行符,所以在表达式中要加入m参数
\r 匹配一个回车符
\s 匹配一个空格符,等同于[ \f\n\r\t\v\u00A0\u2028\u2029]
\S 匹配一个非空格符,等同于[ ^\f\n\r\t\v\u00A0\u2028\u2029]
\t 匹配一个tab
\v 匹配一个竖向的tab
\w 匹配一个数字、_或字母表字符,即[A-Za-z0-9_ ]
\W 匹配一个非数字、_或字母表字符,即[^A-Za-z0-9_ ]
\n 注意不是\n,这里n是一个正整数,表示匹配第n个()中的字符
\0 匹配一个NUL字符。
\xhh 匹配一个由两位16进制数字所表达的字符。
\uhhhh 匹配一个由四位16进制数字所表达的字符。
g:代表可以进行全局匹配。
i:代表不区分大小写匹配。
m:代表可以进行多行匹配。
1>exec(str),返回str中与表达式相匹配的第一个字符串,而且以数组的形式表现,当然如果表达式中含有捕捉用的小括号,则返回的数组中也可能含有()中的匹配字符串
2>test(str),判断字符串str是否匹配表达式,返回一个布尔值
1>match(expr),返回与expr相匹配的一个字符串数组,如果没有加参数g,则返回第一个匹配,加入参数g则返回所有的匹配
2>search(expr),返回字符串中与expr相匹配的第一个匹配的index值
3>replace(expr,str),将字符串中匹配expr的部分替换为str。另外在replace方法中,str中可以含有一种变量符号$,格式为$n,代表匹配中被记住的第n的匹配字符串(注意小括号可以记忆匹配)。
对于replace(expr,str)方法还要特别注意一点,如果expr是一个表达式对象则会进行全局替换(此时表达式必须附加参数g,否则也只是替换第一个匹配),如果expr是一个字符串对象,则只会替换第一个匹配的部分
4>split(expr),将字符串以匹配expr的部分做分割,返回一个数组,而且表达式是否附加参数g都没有关系,结果是一样的
2)和表达式自身相关的两个属性:
1>lastIndex,返回开始下一个匹配的位置,注意必须是全局匹配(表达式中带有g参数)时,lastIndex才会有不断返回下一个匹配值,否则该值为总是返回第一个下一个匹配位置
2>source,返回表达式字符串自身
3)和匹配结果相关的三个属性:
1>index,返回当前匹配的位置
var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2”);
var index1=rs.index;
2>input,用于匹配的字符串。例如:
var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2”);
var input=rs.input;
input的值为sdsfuser1dfsfuser2。
3>[0],返回匹配结果中的第一个匹配值,对于match而言可能返回一个多值的数字,则除了[0]外,还可以取[1]、[2]等等。例如:
var regx=/user\d/;
var rs=regx.exec(“sdsfuser1dfsfuser2”);
var value1=rs[0];
rs=regx.exec(“sdsfuser1dfsfuser2”);
var value2=rs[0];
value1的值为user1,value2的值为user2
5,实际应用
1)实际应用一
描述:有一表单,其中有一个“用户名”input域
要求:汉字,而且不能少于2个汉字,不能多于4个汉字。
实现:
<script>
function checkForm(obj){
var username=obj.username.value;
var regx=/^[\u4e00-\u9fa5]{2,4}$/g
if(!regx.test(username)){
alert(“Invalid username!”);
return false;
}
return true;
}
</script>
<form name=“myForm”onSubmit=“return checkForm(this)”>
<input type=“text” name=“username”/>
<input type=“submit” vlaue=“submit”/>
</form>
2)实际应用二
描述:给定一个含有html标记的字符串,要求将其中的html标记去掉。
实现:
<script>
function toPlainText(htmlStr){
var regx=/<[^>]*>|<\/[^>]*>/gm;
var str=htmlStr.replace(regx,"");
return str;
}
</script>
<form name=“myForm”>
<textarea id=“htmlInput”></textarea>
<input type=“button” value=“submit” onclick=“toPlainText(document.getElementById(‘htmlInput’).value”/>
</form>