正则学习笔记

文星家:  ? *  +  即 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>



返回导读目录,阅读更多随笔



分割线,以下为博客签名:

软件臭虫情未了
  • 编码一分钟
  • 测试十年功


随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

原文地址:https://www.cnblogs.com/08shiyan/p/1864906.html