正则表达式那些事儿(二)
话接上回,我们写了第一个过滤字母的简单程序,和大家一起了解了正则表达式的基础知识。这回,我们以一个实例开始这篇稿子。
代码二:查找字符串中的数字
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 </head> 6 <body> 7 <script> 8 window.onload = function() { 9 filterNums(); 10 } 11 12 function filterNums() { 13 var str = 'abcefd 123 a456 a789'; 14 var reg = /\d/; 15 document.writeln(str.match(reg)+'<br>'); 16 document.writeln(reg.test(str)+'<br>'); 17 str = str.replace(reg, '$'); 18 document.writeln(str); 19 } 20 21 </script> 22 </body> 23 </html>
和上一个程序类似,只不过把 var reg = /\d/; 仅此修改而已。 '\d' 的含义就是“过滤数字”。但是,运行仅是查找出第一个匹配的数字后就结束过滤了,原本想把字符串中所有的数字变成“美刀 $”的,看来这段js深深的打击了我。
若是想把字符串中所有的数字变成“美刀 $”或是 RMB 的,我们只需要简单修改 var reg = /\d/g; 其中,'g' 的含义是global,即找出所有的意思。上代码:
代码三:查找字符串中所有的数字,并替换数字为特殊符号 '$'
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 </head> 6 <body> 7 <script> 8 window.onload = function() { 9 filterNums(); 10 } 11 12 function filterNums() { 13 var str = 'abcefd 123 a456 a789'; 14 var reg = /\d/g; 15 var reg2 = /\$/g; 16 document.writeln(str.match(reg)+'<br>'); 17 document.writeln(reg.test(str)+'<br>'); 18 str = str.replace(reg, '$'); 19 document.writeln(str+'<br>'); 20 str = str.replace(reg2, '¥RMB'); 21 document.writeln(str); 22 } 23 24 </script> 25 </body> 26 </html>
运行结果满眼的 "$" 和 "¥RMB" ,是不是很养眼呢。。。(这是不是暗示着好好学习,工资向上呢,想想都有点儿小激动)。
回归正题,
- 若是正则表达式中需要过滤特殊字符 '$',我们可以这样写 var reg2 = /\$/; 举一反三,查找 '&',我们可以这样写 var reg2 = /\&/;
- 使用 match() 方法过滤并返回了所有的数字且以逗号隔开,我们是不是可以使用 split(',') 方法将其切成成数组,之后便任由我们支配呢!
接下来,我们将引出修饰符的概念。
在代码三中,我们已经体会出到了修饰符的作用,var reg2 = /\$/g,其中 'g' 的含义是检索出全部匹配项。
而常用的修饰符仅有两种:
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
代码四:将 'he' 替换成 'she',忽略大小写
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 </head> 6 <body> 7 <span id="str"></span> 8 <script> 9 window.onload = function() { 10 filterLetters(); 11 } 12 13 function filterLetters() { 14 var str = 'He is the goddess of the eyes of the majority of the audience!'; 15 //Google翻译:她是广大观众眼中的女神! 16 var reg = /he/i; 17 str = str.replace(reg, 'She'); 18 document.getElementById('str').innerHTML=str; 19 } 20 21 </script> 22 </body> 23 </html>
我们知道了 'i' 的含义后,这段代码的含义就显而易见了。
此时,我们需要思考的是:若字符串中有多个大小写不一的匹配项时,我们该如何写这个小程序呢?
【未完】
参考手册:http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp