重庆专业企业建设网站,茂名网页定制,昆山网站建设昆山,seo技术专员招聘正则表达式#xff1a;RegExp对象 正则表达式描述一个字符模式的对象#xff0c;或者说用某种模式去匹配一类字符串的一个公式。 1.创建 可以用RegExp构造函数和直接量两种方式。正则表达式直接量被包含在一对/中. 1 var partern1 RegExp(\\d*);
2 …正则表达式RegExp对象 正则表达式描述一个字符模式的对象或者说用某种模式去匹配一类字符串的一个公式。 1.创建 可以用RegExp构造函数和直接量两种方式。正则表达式直接量被包含在一对/中. 1 var partern1 RegExp(\\d*);
2 //等价于
3 var partern1 /\d*/;
4 var partern2 RegExp(^[1-9]*$);
5 //等价于
6 var partern2 /^[1-9]*$/; RegExp 在创建正则表达式时可以为其制定一个标志来说明高级匹配模式的规则。 当使用RegExp创建表达式对象时需要指定的标志作为第二个参数传入. 当使用直接量创建表达式对象时直接在标识表达式的结束位置/写上标志. 标志含义i执行匹配时忽略大小写g执行一个全局匹配即找到所有匹配项m多行匹配模式 标志可以自由搭配使用.......... var partern1 RegExp(\\d*,g);//等价于var partern1 /\d*/g;var partern2 RegExp(^\\S$,i);//等价于var partern2 /^\S$/i;var partern3 RegExp(^\\w$, ig);//等价于var partern3 /^\w$/ig; 2.语法规则 1.正则表达式由字符直接量元符号和各种转义序列组成。 字符直接量匹配它本身。 除了字母字符和数字外可以通过\开头的转义序列支持非字母字符。 直接量字符 匹配 字母或数字字符 自身 \o NUL字符 \t 水平制表符 \v 垂直制表符 \n 换行符 \r 回车符 \f 换页符 \xnn 由十六进制nn指定的拉丁字符 \uxxxx 由十六进制xxxx指定的Unicode字符 \cx 控制字符x 在“[]”内放入单独的直接量组成字符类一个字符类可以和它所包含的任何单个字符相匹配eg[abc] 匹配“a”,“b”,“c” 字符类 匹配 [...] 括号内包含的任意字符 [^...] 括号内不包含的任意字符 . 除换行符和其他Unicode行中字符之外的其它字符 \w 大小写字母数字下划线 \W 非大小写字母数字下划线 \s 空白字符 \S 非空白字符 \d 数字字符 \D 非数字字符 eg/\d\d/ : 两位数字。 /[bB]ug/ : bug,Bug. /a.b/ : abb, anb~ 等 。 /[^0-9]/ : 任何单个非数字。 上面给的是单位字符下面给出多位字符 符号 含义 {m,n} 匹配前一项最少m次最多n次 {m,} 匹配前一项最少m次 {m} 匹配前一项m次 匹配前一项0次或者1次 匹配前一项最少1次 {1,} * 匹配前一项0次或多次{0,} eg: /\d{1,3}/ : 匹配1~3位数字。 /a{3}/ : 匹配aaa. /a?/ : 匹配‘’和‘a 注意在重复匹配时正则会尽可能多的匹配更多的字符贪婪匹配。如果在表达式后面加上元符号“”就会进行费贪婪匹配匹配尽可能少的字符。 eg /a/匹配’aaaab 时会匹配前四位a , /a?/则只会匹配第一位a 正则表达式还可以指定选择项为表达式分组和引用前面子表达式所匹配的字符。 符号 含义 | 选择匹配符号左边的子表达式或者右边的子表达式。 (...) 组合将几个项目组合为一个单元这个单元可以被重复字符所使用还可以被引用。 (?:...) 只组合为一个单元但不能被引用 \n n是一个数字表示表达式中第n个可以被引用的组合从左到右按书写顺序排序。 \n 匹配与其所引用的分组匹配字符一样的字符 eg/a|b/ : a,b . /(a|b)B\1/ :aBa,bBb . /(?:m)(a|b)B\1/ : \1匹配a|b而不是m 正则表达式还有一些字符和转义序列匹配的是字符串中的特定位置 锚字符 字符 含义 ^ 匹配字符串的开头。在多行匹配模式中匹配一行的开头。 $ 匹配字符串的结尾。在多行匹配模式中匹配一行的结尾 \b 参考http://www.w3school.com.cn/js/jsref_regexp_begin.asp 匹配一个词语(单词)的边界 \b 元字符匹配单词边界。 在单词边界匹配的位置单词字符后面或前面不与另一个单词字符直接相邻。请注意匹配的单词边界并不包含在匹配中。换句话说匹配的单词边界的长度为零。不要与 [\b] 混淆。 如果未找到匹配则返回 null 提示\b 元字符通常用于查找位于单词的开头或结尾的匹配。 \B 匹配所有非词语(单词)边界的字符 (?:p) 正前向匹配要求接下来的字符与模式p匹配但匹配的结果不包含p匹配的字符。 (?!p) 反前向匹配要求接下来的字符不与模式p匹配 eg /^Bugs/ 匹配Bugs Bug不匹配Bug Bug . /s$/ : 匹配 Bug Bugs 不匹配Bugs Bug . /^Bugs Bug$/ 匹配Bugs Bug不匹配Bug Bug . /\bm/ 匹配 moon 中的 m /oo\b/ 不匹配 moon 中的 oo因为 oo 后面的 n 是一个单词字符 /oon\b/ 匹配 moon 中的 oon因为 oon 位于字符串的末端后面没有单词字符 /\w\b\w/ 不匹配任何字符因为单词字符之后绝不会同时紧跟着非单词字符和单词字符。 script typetext/javascriptvar str Bugs Bug;var patt1 /\bBug/g;document.write(str.match(patt1));//Bug,Bug/script /Bugs(?: Bug)/ : 匹配Bugs Bug 不匹配BugsBug 注意如果想匹配元符号或者具有特殊含义的符号时只需要在相应的字符前面加上转义符反斜线“\”即可。 3. 正则表达式的属性 source 是一个只读的字符串存放正则表达式的文本。 script typetext/javascriptvar str Bugs Bug;var reg new RegExp(^(Bugs Bug){0}$, igm);var test reg.source;alert(test); //^(Bugs Bug){0}$ /script global 是一个只读的布尔属性表示正则表达式是否启用了全局匹配模式。 script typetext/javascriptvar str Bugs Bug;var reg new RegExp(^(Bugs Bug){0}$, igm);var reg1 new RegExp(^(Bugs Bug){0}$, m);alert(reg1.global);//falsealert(reg.global);//true/script ignoreCase 同global类似只读的布尔值表示正则表达式是否启用了忽略大小写的模式。 multiline : 只读属性表示正则表达式是否启用了多行匹配的模式。 lastIndex 是一个可读可写的整数记录了在全局匹配模式下在字符串中下一次开始匹配的位置 4.用于匹配模式的String方法 replace方法 : var str BugsBug;
var reg3 new RegExp(, g);alert(str.replace(reg3, ));//Bugs Bug search方法 : 以正则表达式为参数返回第一个与之匹配的子字符的开始位置如果没有任何子字符与之匹配返回-1. script typetext/javascriptvar str I Love Bugs Bug;var reg new RegExp(B.*s, igm);//匹配Bugsalert(str.search(reg)); //7alert(str.search(/.(?:Bug)/));//6 //匹配Bugs前面的空格/script 注意如果参数不是正则表达式则参数会被传递给RegExp的构造函数变为正则表达式同时search并不支持全局匹配模式总是返回找到的第一个子字符的位置. 在replace方法的第二个参数中可以使用符号“$”加数字来引用这些分组所匹配的内容。 script typetext/javascriptvar str my name is?Bugs Bug;var regstr str.replace(/^.*\?([a-zA-Z].*)$/i, my name is:$1);alert(regstr); //my name is:Bugs Bug/script 方法match接受一个正则表达式作为参数如果不是正则表达式会转换成正则表达式 返回一个包含匹配结果的数组数组的第一个元素是匹配的子字符串 从第二个元素开始是正则表达式的分组所匹配的内容如果正则表达式被设置成了全局匹配模式则返回的数组就是字符串中所有匹配的子字符串 script typetext/javascriptfunction test() {var str my name is?Bugs Bug;var strreg str.match(/^.*\?(([a-rA-Rt-zT-Z]*).*([a-zA-z]*))$/);alert(strreg); //my name is?Bugs Bug,Bugs Bug,Bug,var strreg2 str.match(/^.*\?([a-rA-Rt-zT-Z]*).*([a-zA-z])*$/g);alert(strreg2); //my name is?Bugs Bug }test();/script 如果match作用于一个非全局模式的正则表达式则返回的数组会有两个额外的 属性 index包含所匹配的字符串在源字符串中的位置 input保存了源字符串的一个副本。 alert(strreg.index);//0alert(strreg.input); //my name is?Bugs Bug }test(); split方法,有一个接受正则表达式的参数 script typetext/javascriptfunction test() {var str my|name\\is?Bugs Bug;alert(str.split(/\||\\|\?| /));//my,name,is,Bugs,Bug}test();/script RegExp定义了两个用于模式匹配的方法他们的行为和前面介绍的String方法类似。第一个是exec方法和match方法相似只是它接受一个字符串的参数在此字符串中进行匹配查找返回一个数组与match方法不同的是:无论正则表达式是否开启了全局匹配模式exec方法每次只匹配一个结果返回数组的第一个元素是匹配的子字符串从第二个元素开始是正则表达式中各个分组所匹配的内容 只是当正则表达式开启了全局匹配模式时每次成功匹配后正则表达式的lastIndex属性都会被改写以标识此次匹配的子字符串的位置在下一次执行exec方法进行匹配时会从lastIndex属性标识的位置开始查找当没有任何匹配时lastindex属性会被重置为0并返回null这个特性使程序员反复匹配一个字符串从而得到所有匹配的子字符串的所有信息。 script typetext/javascriptfunction test() {var str my|name\\is?Bugs Bug;var reg /(Bugs) (Bug)/g;var a;while ((a reg.exec(str)) ! null) {document.write(a.join( ) br/); //Bugs Bug Bugs Bug}var str a1b2c3|d4e5%f6;var reg /([a-z])([0-9])/g;var a;while ((a reg.exec(str)) ! null) {document.write(a.join( ) br/);/* a1 a 1b2 b 2c3 c 3d4 d 4e5 e 5f6 f 6*/}}test();/script 另一个方法是test接受一个字符串作为参数然后进行匹配检测如果字符串能够进行匹配则返回true否则false script typetext/javascriptfunction test() { var reg /([A-Za-z])/;alert(reg.test(Bugs Bug));//truealert(reg.test(123));//false}test();/script 常用的正则表达式(未验证) 中文字符[\u4e00-\u9fa5]双字节字符(包括汉字)[^\x00-\xff]E-mail地址/^\w([-.]\w)*\w([-.]\w)*\.\w([-.]\w)*$/iHTML标记/(.*).*\/\1|(.*)\//URL 地址/^http://([\w-]\.)[\w-](/[\w-./?%]*)?$/i字符串首尾的空格/(^\s*)|(\s*$)/颜色代码/\#[a-fA-F0-9]{6}/身份证号码/^\d{15}(\d{2}[xX0-9])?$/电话号码/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/整数/^(\|\-)?[1-9]\d*$/浮点数/^(\|\-)?(0|[1-9][0-9]*)(\.[0-9]*[1-9])?$/转载于:https://www.cnblogs.com/wjshan0808/archive/2013/05/19/3086567.html