JS的正则表达式

 正则表达式是程序员要掌握的一个基础知识,不少人觉得它很难,其实不然,只要有耐心,仔细分析,很多问题都可以迎刃而解的。

正则表达式的格式一般是/pattern/[flags],

flags标志字符:
---g用作全局标志
---i用作忽略大小写标志
---m用作多行标志

我们先来看个例子:

范例1.

var strSrc="a12b34c56";
var pattern=/(/d)(/d)/g;
var strDest=strSrc.replace(pattern,"$2$1");
alert(strSrc + " has been converted into " + strDest);     结果是:a12b34c56 has been converted into a21b43c65

如果写成var pattern=/(/d)(/d)/; 那么结果是:a12b34c56 has been converted into a21b34c56

这里flags标志字符“g”的作用用来全文检索目标对象,找到相匹配的元素。看到这里,可能有人对replace方法里的第二个参数"$2$1"不明白。“$1$2…$9”是RegExp对象的静态属性,用来代表相对应正则表达式里“()”相应的目标对象的元素。在这个例子里,$1代表的是第一个(/d)即目标对象里的第一个数字,$2代表的是第二个(/d)即目标对象里的第二个数字。这段代码的母的是把目标对象中,找到两两相连的数字,并将它们互相调换位置。

学习正则表达式的关键之处是要明白表达式里每个元字符所代表的含义,网上有很多这方面的相关知识,这里我就不多说了。知道了每个元字符所代表的含义,写出一个复杂的正则表达式就不是一件难事了。在写出正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先级顺序来求值。优先级如下:

1./ 转义符

2.(), (?:), (?=), [] 圆括号和方括号

3.*, +, ?, {n}, {n,}, {n,m} 限定符

4.^, $, /anymetacharacter 位置和顺序

5.|“或”操作

范例2.

var newVarString="<span class='sp1' id='sp1'>testReplace</span>";
alert(newVarString.replace(/<//?SPAN[^>]*>/gi, ""));  结果是:testReplace
alert(newVarString.replace(/<(/w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3"));   结果是:<span id='sp1'>testReplace</span>

分析:

“ <//?SPAN[^>]*>”是要匹配的表达式。我们把字符串一个个分开解释。
“ <”表示字符串中以“ <”开始的,紧接着是一个“/”。由于“/”是正则表达式里的特殊符号,所以要用上转义符“/”,所以“//”其实就是表示“/”。“?”表示字符规定其前导对象必须在目标对象中连续出现零次或一次,即出现零次或一次的“/”。“SPAN”就是表示“SPAN”。“[^>]”表示匹配^后面跟着的字符“>”除外的任意字符,“*”表示字符规定其前导字符即除了“>”外的任意字符必须在目标对象中出现零次或连续多次。这句代码的作用是将SPAN标签提取出去除。

对于表达式“<(/w[^>]*) class=([^ |>]*)([^>]*)”,“/w”用于匹配字母,数字或下划线字符;“[^>]*”还是表示匹配字符“>”除外的任意字符出现零次或连续多次。“class=”就是用来匹配“class=”。而后的“()” 把字符串组合在一起,“()”符号包含的内容即“[^ ¦>]*”必须同时出现在目标对象中。“¦”表示“或”,或者。“[^ ¦>]*”表示非空格或者非“>”的字符在目标对象中出现零次或连续多次。“([^>]*)”则表示非“>”的字符在目标对象中出现零次或连续多次。这句代码的作用是将class属性提取出去除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值