JS 正则表达式转义符 \ 问题

2018-04-10  本文已影响85人  李逍遥JK

今天的杭州也是阳光明媚,可能一年中最好的天气就这几天了吧


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.动态生成正则表达式

/**
 * field本身以$开头和结束
 * 我们想将他的$lac$替换掉
 */
var k = 'lac';
var field = '$lac$,$ci$';

/*
 * 这里我们将 '$' + k + '$' 拼接
 * 此时不能直接用 \ 而应该用两个 \\ 
 * 第一个 \  的作用是转义,将第二个 \ 从字符串转为正则表达式的 \
 * 否则 第二个 \ 只是普通的字符串不能将$转义 
 */
field = field.replace(RegExp('\\$' + k + '\\$'),  '$wor$');
console.log(field)

下图模拟:


测试结果
/**
 * 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

上一篇 下一篇

猜你喜欢

热点阅读