今天的杭州也是阳光明媚,可能一年中最好的天气就这几天了吧
2018-04-10 杭州.png
工作中遇到下面的问题。
表达式转义符 \ 的使用 以及 动态生成正则表达式的方法;
1. \ 的用法
\ 主要是用法是在正则表达式中的特殊符号转换为它本身的意思,比如$在正则表达式中代表: 匹配字符串的结尾,在多行检索中,匹配一行的结尾。
但是今天的情况是在正则表达式中,字符串本身以$开头和结束。比如:
/*
* field本身以$开头和结束
* 我们想将他的$lac$替换掉
*/
var field = '$lac$,$ci$';
field = field.replace(RegExp(/$lac$,$ci$/), 'wor');
console.log(field)
结果为:
image.png
没有成功,是因为现在的$是属于正则表达式,而不是字符$,因此我们在$前加上 \ 再试一试
image.png
成功。上面就是 \ 一般情况下的用发。下面总结下 \ 在动态语句中的用法以及如何动态生成正则表达式
2.动态生成正则表达式
- 1.方法1,这里例子相同。但是 \ 的用法有区别
/**
* field本身以$开头和结束
* 我们想将他的$lac$替换掉
*/
var k = 'lac';
var field = '$lac$,$ci$';
/*
* 这里我们将 '$' + k + '$' 拼接
* 此时不能直接用 \ 而应该用两个 \\
* 第一个 \ 的作用是转义,将第二个 \ 从字符串转为正则表达式的 \
* 否则 第二个 \ 只是普通的字符串不能将$转义
*/
field = field.replace(RegExp('\\$' + k + '\\$'), '$wor$');
console.log(field)
下图模拟:
测试结果
- 2.第二种动态生成,用eval()方法
/**
* field本身以$开头和结束
* 我们想将他的$lac$替换掉
*/
var k = 'lac';
var field = '$lac$,$ci$';
// eval(k = '\\$' + k + '\\$')也能使用
eval(k = '\$' + k + '\$');
field = field.replace(k , 'wor');
console.log(field)
测试结果.png
这个问题折腾了我好久:
image.png
解答(来自http://www.w3school.com.cn/jsref/jsref_replace.asp)
image.png
所以每两个$$会变为$(直接量符号)
$&会变成正则表达式,如下图:
image.png
下面我们来解释一下:
var field = '$a$bdc';
field = field.replace(/\$a\$/gm , '$wor$&');
console.log(field)
var field = '$a$bdc';
// $& 会替换为正则表达式
// $wor$& 相当于$wor + $a$
field = field.replace(/\$a\$/gm , '$wor$&');
console.log(field)
// 故得到 $wor$a$bdc












网友评论