我想在JavaScript中创建String.replaceAll()方法,我认为使用正则表达式是最简洁的方法。然而,我无法确定如何将变量传递给正则表达式。我已经可以这样做了,这将用“A”替换“B”的所有实例。

"ABABAB".replace(/B/g, "A");

但我想这样做:

String.prototype.replaceAll = function(replaceThis, withThis) {
    this.replace(/replaceThis/g, withThis);
};

但显然,这只会替换文本“replaceThis”。。。那么如何将此变量传递到正则表达式字符串中?


当前回答

这些答案我都不清楚

简单的答案是:

var search_term = new RegExp(search_term, "g");
text = text.replace(search_term, replace_term);

例如:

$(“button”).click(函数){查找和替换(“Lorem”、“Chocolate”);查找和替换(“ipsum”,“冰淇淋”);});函数Find_andreplace(搜索_时间段,替换_时间段){text=$(“textbox”).html();var search_term=新RegExp(search_term,“g”);text=text.replace(搜索时间,替换时间);$(“textbox”).html(文本);}<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script><文本框>Lorem ipsum</textbox><button>单击我</button>

其他回答

这:

var txt=new RegExp(pattern,attributes);

相当于:

var txt=/pattern/attributes;

看见http://www.w3schools.com/jsref/jsref_obj_regexp.asp.

我在这里和stackoverflow或类似论坛上的其他公开门票中找到了很多带有奇怪例子的答案。

这是我认为最简单的选项,如何将变量作为模板文本字符串;

const someString = "abc";
const regex = new RegExp(`^ someregex ${someString} someregex $`);

正如您所看到的,我没有在开头或结尾处使用正斜杠,RegExp构造函数将重建有效的正则表达式文字。还可以使用yup matches函数。

您可以构造一个新的RegExp对象,而不是使用/regex\d/g语法:

var replace = "regex\\d";
var re = new RegExp(replace,"g");

您可以通过这种方式动态创建正则表达式对象。然后您将执行以下操作:

"mystring1".replace(re, "newstring");

此自调用函数将使用索引遍历replacerItems,并在每次传递时全局更改字符串上的replacerItem[index]。

  const replacerItems = ["a", "b", "c"];    

    function replacer(str, index){
          const item = replacerItems[index];
          const regex = new RegExp(`[${item}]`, "g");
          const newStr = str.replace(regex, "z");
          if (index < replacerItems.length - 1) {
            return replacer(newStr, index + 1);
          }
          return newStr;
    }

// console.log(replacer('abcdefg', 0)) will output 'zzzdefg'

如果要获取所有出现的单词(g),请区分大小写(i),并使用边界,使其不是另一个单词中的单词(\\b):

re = new RegExp(`\\b${replaceThis}\\b`, 'gi');

let inputString=“我是John或johnny,但我更喜欢John。”;let replaceThis=“John”;let re=新RegExp(`\\b${replaceThis}\\b`,'gi');console.log(inputString.replace(re,“Jack”));