JavaScript中的模板字面量与替换?

3

我可以在JavaScript中使用模板字面量替换正则表达式吗?

我有如下代码:

const regex = "~!@#$%^&*()_" ;
const data = "$88.10";
const result = data.replace(`[^${regex}/gi]$`, '');

但是并没有任何内容被剥离掉,所以我不确定是不是格式出了问题。

2个回答

7

我能在 JavaScript 中使用模板字面量和正则表达式替换吗?

使用正则表达式字面量(例如/^(.*)&/g)是不行的。模板字面量用于构建字符串,而正则表达式字面量不是字符串。

您可以使用模板字面量来构建正则表达式的模式,如下所示:

const regex = "~!@#$%^&*()_" ;
const data = "$88.10";
const pattern = `[^${regex}/gi]$`;
const result = data.replace(new RegExp(pattern, 'g'), '');

或者您可以创建一个标记模板来为您构建正则表达式,例如:

rgx`[${regex}]` // returns new RegExp('..

例如:

// tagged template function
function rgx(str0, str1){
  return new RegExp(`${str0.raw[0]}${str1}${str0.raw[1]}`, 'gi')
}

const regex = "~!@#$%^&*()_" ;
const data = "$88.10";
const result = data.replace(rgx`[${regex}]`, '');

console.log(result)


我在这里找到了一个有趣的视频,解释了ES6模板字面量:https://www.youtube.com/watch?v=asRu9MPojFE - Milap

1
使用模板字面量将模式构建为字符串,然后从该字符串创建正则表达式模式,如何?

const regex = "~!@#$%&*()_^" ;
const data = "$88.10";
// suppose you want to remove these characters from the string
const result = data.replace(new RegExp(`[${regex}]`, 'gi'), '');

console.log(result)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接