刚开始学习JavaScript中正则表达式的内容,对其有所不解,主要是:replace函数替换的第二个参数中,使用$符号的问题,如下:
不懂其中$` $& $' 的用法,我是在w3cshool网站上学的,它的例子并未详细讲解这三个的用法,
还请各位大侠帮忙讲解一下,万分感谢。
PS: 关于这个用法,不知道用什么来描述,以便可以搜索到相关的资料,
网上好多讲JavaScrit正则表达式的部分都没有这方法的具体讲解。
不懂其中$` $& $' 的用法,我是在w3cshool网站上学的,它的例子并未详细讲解这三个的用法,
还请各位大侠帮忙讲解一下,万分感谢。
PS: 关于这个用法,不知道用什么来描述,以便可以搜索到相关的资料,
网上好多讲JavaScrit正则表达式的部分都没有这方法的具体讲解。
<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>
<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>
reg = /Hi/;
alert(str.replace(reg, "Hey")); // "Hello Hey Welcom"
alert(str.replace(reg, "$`")); // "Hello Hello Welcome"
alert(str.replace(reg, "$&!")); // "Hello Hi! Welcome"
alert(str.replace(reg, "$'")); // "Hello Welcome Welcome"