【问题标题】:Template Literals with Javascript Replace? [duplicate]带有 Javascript 替换的模板文字? [复制]
【发布时间】:2018-08-15 17:13:04
【问题描述】:

我可以使用带有 javascript 替换正则表达式的模板文字吗?

我有这样的事情

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

虽然没有任何内容被剥离,所以不确定我是否只是弄乱了格式。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    我可以使用带有 javascript 替换正则表达式的模板文字吗?

    使用正则表达式文字(即/^(.*)&/g)你不能。模板文字用于构建字符串,正则表达式文字不是字符串。

    你可以做的是使用模板文字来构建正则表达式的模式,如下所示:

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

    或者,您可以创建一个Tagged template 来为您构建正则表达式:

    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)

    【讨论】:

    【解决方案2】:

    如何先使用模板文字将模式构造为字符串,然后从字符串创建正则表达式模式?

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多