正则表达式学习(续1)
一、问题:检测一个字符串中只包含字母或数字
方法:
1 var str = "www"
2 var re = /^[A-Za-z0-9]*$/
3 alert(re.test(str))
注意:^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
二、问题:
(1)<a href="www.51js.com" target="_self">abcdefg</a> 如何变成
<a href="www.51js.com" target="_self"><font color="red">徐军</font>bcdefg</a>
方法:
1 var str = '<a href="www.51js.com" target="_self">abcdefg</a>';
2 alert(str.replace(/<(.*)(\s*.*>)(.*)a(.*)(<\/\1>)/g, "<$1$2$3<font color=\"red\">a</font>$4$5"));
(2)<a href="www.51js.com" target="_self">abcdefg</a> 如何变成
<a href="www.51js.com" target="_self"><font color=red>a</font>bc<font color=red>a</font>defg</a>
方法:
1 function example(str,search){
2 var re = /<(\w+?) .+?>(.+?)<\/\1>/g;
3 str.match(re);
4 var str2 = RegExp.$2, //先取得anchor的innerHTML;
5 re2=new RegExp("("+search+")","g"),//很妙的思路,用要修改内容做分割
6 newstrarr = str.split(str2);//然后用修改好的内容做粘合,把split后的数组元素jion起来!
7 return newstrarr.join(str2.replace(re2,"<font color=red>$1</font>"));
8 }
9
10 var str = '<a href="www.51js.com" target="_self">abcadefg</a>',searchStr = "a";
11 alert(example(str, searchStr));
注意:/<(.*)(\s*.*>)(.*)(<\/\1>)/g提取HTML标签,中间内容为 $3 。或者/<(\w+?) .+?>(.+?)<\/\1>/g,中间的内容为$2
三、问题:把一个字符串里面的"/"全部替换成"\"
alert("a/b".replace(/\//ig,"\\"));
四、问题:如何将
<td width="100%"> test
test1 test2
test3 test4
</td> 变成
<td width="100%"><nobr> test
test1 test2
test3 test4
</nobr></td>
方法:
var str = '<td width="100%"> test \
test1 test2\
test3 test4\
</td>/'
alert(str.replace(/(<[^>]+>)([^<]+)(<\/.+>)/,"$1<nobr>$2</nobr>$3"))
五、http://www.163.com/index.asp?a=test1&b=test2&c=test3 如何把&c=test3去掉
方法:
alert('http://www.163.com/index.asp?a=test1&b=test2&c=test3'.replace(/&[^&]+$/,''));
六、问题:删除“3,13,231,33,71,9,5"中一元素
如删除3得到"13,231,33,71,9,5"
删除33得到"3,13,231,71,9,5"
方法:
str="5,3,13,231,33,71,9,5"; alert(str.replace(/(\b5,\b)|(,\b5\b$)/g,'')) //改变里面要替换的数字 alert(str.replace(/^3,|,3\b/g,'')) //改变里面要替换的数字
七、问题:str="1111abc2222abbbc333abbc";我要把字符串里所有匹配/a(b*)d/的子串中的(b*)取出来。对这个str就是把 'b','bb','bbb'都取出来
方法:
str="1111abc2222abbbc333abbc"; var re=/[a-z]([a-z]+)[a-z]/ig; var tmp; while((tmp=re.exec(str))!=null) alert(tmp[1]);