刚开始学习JavaScript中正则表达式的内容,对其有所不解,主要是:
replace函数替换的第二个参数中,使用$符号的问题,如下:
不懂其中$` $& $' 的用法,我是在w3cshool网站上学的,它的例子并未详细讲解这三个的用法,
还请各位大侠帮忙讲解一下,万分感谢。
PS: 关于这个用法,不知道用什么来描述,以便可以搜索到相关的资料,
网上好多讲JavaScrit正则表达式的部分都没有这方法的具体讲解。
------解决方案--------------------
$` $& $' 分别代替匹配字符串左侧,匹配字符串,匹配字符串右侧
可以用于更换位置,和一些操作
------解决方案--------------------
- HTML code
<html> <head> <script language="javascript"> function Window_Load(){ var str = "a123b456c78"; var reg = /(\d+)/g; //加上个分组括号 reg.test(str); //进行正则匹配 reg.test() 或 reg.exec() 或 reg.compile() /* 在javascript里,正则匹配完成以后,当前匹配所有相关的内容都会放到RegExp 对象里,所以,你要是想查看($` $& $‘)的内容,像下面这样就可以了: */ log("正则表达式:", reg.source); log("字符串:", RegExp["$_"]); //RegExp.input log("匹配字串:", RegExp["$&"]); log("匹配字串左侧的字串(RegExp[\"$`\"]):" ,RegExp["$`"]); //RegExp.leftContext log("匹配字串右侧的字串(RegExp[\"$'\"]):" ,RegExp["$'"]); //RegExp.rightContext log("捕获的第一个分组的内容(RegExp[\"$1\"]):",RegExp["$1"]); log("最后一个括号括起来的字串(RegExp[\"$+\"]):",RegExp["$+"]);//RegExp.lastParen } function log(){ for(var i = 0; i < arguments.length;i++){ document.write(arguments[i]+ " "); } document.write("<BR />"); } </script> </head> <body onload="Window_Load();"> </body> </html>
------解决方案--------------------
我自己的贴子居然没有权限修改。。 再发一个:
- HTML code
<html> <head> <script language="javascript"> function Window_Load(){ /* 漏了一个,你说的replace函数替换的第二个参数中,使用$符号的问题 */ var str = "a1b2c3"; /* 比如上面的str字串,假设想把字串里的所有数字提取出来(或者说把里面的字母全干掉) */ //1. 可以把字母全部replace成空 var reg = /[a-z]/g; //注意一定要加上 g ,表示全部替换,不然的话之能替换第一个 log(reg.toString(), " str.replace(reg,\"\") : " ,str.replace(reg,"")); //返回:123 //2. 字串格式固定的情况下,就可以用$1,$1..$2的方式直接替换 var reg = /^[a-z](\d)[a-z](\d)[a-z](\d)$/; log(reg.toString(), " str.replace(reg,\"$1$2$3\") : " ,str.replace(reg,"$1$2$3")); //返回:123 log(reg.toString(), " str.replace(reg,\"$1$1$3\") : " ,str.replace(reg,"$1$1$3")); //返回:113 log(reg.toString(), " str.replace(reg,\"$2$1$3\") : " ,str.replace(reg,"$2$1$3")); //返回:213 log(reg.toString(), " str.replace(reg,\"$2测$2试$3\") : " ,str.replace(reg,"$2测$2试$3")); //返回:2测2试3 //其实在执行str.replace以后,正则表达式已经匹配过一次了,所以下面代码可用 log(reg.toString(), " RegExp[\"$1\"] + RegExp.$2 + RegExp.$3 : ", RegExp["$1"] + RegExp.$2 + RegExp.$3); //返回123 //3。RegExp.exec() 或 String.mactch()方法来实现 var reg = /\d/g; //你可以自己测试一下 有g 跟 没g的区别 var rdata = ""; while(reg.exec(str)){ //没有g的时候 这个会变成死循环 (别说我没提醒你啊..!) rdata += RegExp["$&"]; } log(reg.toString()," reg.exec(str) : ",rdata); //返回123 //或者 var result = str.match(reg); //返回结果数组 log(reg.toString(), " str.match(reg).join(\"\") : ", result.join("") );//返回123 } function log(){ for(var i = 0; i < arguments.length;i++){ document.write(arguments[i]+ " "); } document.write("<BR />"); } </script> </head> <body onload="Window_Load();"> </body> </html>