有如下代码: 复制代码 代码如下: channel title 蓝色理想 /title /channel item title 界面设计测试规范 /title /item item title 《古典写实美女》漫画教程 /title /item item title 安远――消失的光年 /title /item item title asp.net 2.0多语言网站解决方案 /title /item
要求匹配item里的title而不匹配channel里的title。
基本正则:
/ title [/s/S]*? //title /gi 首先是title标签,内容为任意字符若干个,然后是title结束标签。这个正则已经能匹配到所有的title标签。
首先,我简单地修改了一下原正则:
/ title [^ ]*? //title /gi,因为title里面不应该再嵌有其它标签,这个正则同样是匹配所有标题的内容,最后再加上不去匹配channel中的title。整个正则如下:
/ title [^ ]*? //title (?!/s* //channel )/gi(?!/s* //channel )表示要匹配字符串的后面不能跟着若干个空格和一个channel的结束标签。
Carl给出的函数如下: 复制代码 代码如下: function f(phoneNumber) { var pattern = /^(135)(/d{8})$/; if(pattern.test(phoneNumber)) return phoneNumber.replace(pattern,"$2"); else return "不是135打头的手机号码!"; }
/^(135)(/d{8})$/ 正则中,135作为开头表示第一个子正则表达式,第二个括号内的子正则表达式则匹配后面的8个数字,然后在replace中使用$2就可以引用这个子正则表达式匹配的内容了。测试代码如下: 复制代码 代码如下: script type="text/javascript" function f(phoneNumber) { var pattern = /^(135)(/d{8})$/; if(pattern.test(phoneNumber)) return phoneNumber.replace(pattern,"$2"); else return "不是135打头的手机号码!"; } var arr = new Array( "13588888333", "13658447322", "13558885354", "13587774654", "13854554786" ); for(var i = 0; i arr.length; i++) document.write(f(arr[i])+' br / /script
正则表达式替换变量 来源:求教正则
有一个数组:
var _A = ['A','B','C','D'];
有一个有“变量”的字符串。
var _B = ' ul li $0$ /li li $1$ /li li $2$ /li li $3$ /li /ul
说是变量,其实只是字符串中的特殊字符,例如$0$,就称这个为伪变量吧。
最后的要求就是使用正则获得下面这样一个字符串:
_C = ' ul li A /li li B /li li C /li li D /li /ul
IamUE给出了代码: 复制代码 代码如下: script type="text/javascript" var _A = ['A','B','C','D']; var _B = ' ul li $0$ /li li $1$ /li li $2$ /li li $3$ /li /ul var reg=//$/d+/$/ig; C=_B.replace(reg,function($1){ var indexnum=$1.replace(//$/ig,""); if (indexnum _A.length) {return _A[indexnum];} else{return ""} }); alert(C); /script
不劳而获一次,这个子虚乌有前辈已经给出了非常好的解决方案:我直接把代码贴出来了: 复制代码 代码如下: !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd" html xmlns="http://www.w3.org/1999/xhtml" head meta http-equiv="Content-Type" content="text/html; charset=gb2312" / META name="Author" content="Sheneyan" / script type="text/javascript" function encode(s){ return s.replace(/&/g," ").replace(/ /g," ").replace(/ /g," ").replace(/([///./*/[/]/(/)/$/^])/g,"//$1"); } function decode(s){ return s.replace(///([///./*/[/]/(/)/$/^])/g,"$1").replace(/ /g," ").replace(/ /g," ").replace(/ /g," } function highlight(s){ if (s.length==0){ alert('搜索关键词未填写!'); return false; } s=encode(s); var obj=document.getElementsByTagName("body")[0]; var t=obj.innerHTML.replace(/ span/s+ "$1"); obj.innerHTML=t; var cnt=loopSearch(s,obj); t=obj.innerHTML var r=/{searchHL}(({(?!//searchHL})|[^{])*){//searchHL}/g t=t.replace(r," span $1 /span obj.innerHTML=t; alert("搜索到关键词"+cnt+"处") } function loopSearch(s,obj){ var cnt=0; if (obj.nodeType==3){ cnt=replace(s,obj); return cnt; } for (var i=0,c;c=obj.childNodes[i];i++){ if (!c.className||c.className!="highlight") cnt+=loopSearch(s,c); } return cnt; } function replace(s,dest){ var r=new RegExp(s,"g"); var tm=null; var t=dest.nodeValue; var cnt=0; if (tm=t.match(r)){ cnt=tm.length; t=t.replace(r,"{searchHL}"+decode(s)+"{/searchHL}") dest.nodeValue=t; } return cnt; } /script style type="text/css" .highlight{background:green;font-weight:bold;color:white;} /style /head body form onsubmit="highlight(this.s.value);return false;" p input name="s" id="s" title="搜索内容:"/ input type="submit" value="搜索"/ /p /form div id="content" 测试高亮的代码。很长很长的代码…………………… /div /body /html