正则表达式学习(续1)

时间:2022-11-11 15:24:54

一、问题:检测一个字符串中只包含字母或数字

方法:

  
  
  
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]);