如何将参数传递给正则表达式构造函数,并在 String.matchAll 方法中使用 [重复]

Posted

技术标签:

【中文标题】如何将参数传递给正则表达式构造函数,并在 String.matchAll 方法中使用 [重复]【英文标题】:How can I pass parameter to regex constructor, and used in String.matchAll method [duplicate] 【发布时间】:2022-01-24 04:35:12 【问题描述】:

我想在字符串中搜索单词,假设我输入了单词“test”,它会返回所有匹配“test”的结果,但是我不知道如何将输入的单词传递给正则表达式构造函数。比如下图,如果我直接在matchAll中输入/\btest\b/g,那就没问题了,但是如果我想搜索不同的词怎么办,所以我尝试/\b$word\b/g,但是不行。

您知道我可以使用的任何解决方案吗?提前致谢。

const word = "test";
const regex = `/\b$word\b/g`;
const str = 'test1 test 2';
const array1 = [...str.matchAll(new RegExp(regex, "g"))];
const array2 = [...str.matchAll(new RegExp(/\btest\b/g, "g"))];

console.log(array1);
// expected output: Array ["test"] // however it return empty array []

console.log(array2);
// expected output: Array ["test"] // it do return expected result

【问题讨论】:

【参考方案1】:

您可以使用RegExp 构造函数,但您应该考虑到在使用构造函数时,正常的字符串转义规则(包含在字符串中时以\ 开头的特殊字符)是必要的。像这样:

const word = "test";
const regex = new RegExp(`\\b$word\\b`, "g");
const str = "test1 test 2";
const array1 = [...str.match(regex)];

console.log(array1);

【讨论】:

谢谢!我很笨,是的 \ 也应该包含在字符串中 不客气。

以上是关于如何将参数传递给正则表达式构造函数,并在 String.matchAll 方法中使用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将正则表达式参数传递给 PHP 中的 preg 替换回调?

如何将参数传递给静态类构造函数?

如何将参数传递给 Python 模块中的主函数?

如何将构造函数参数传递给 AppDomain.CreateInstanceXXX?

我如何将参数传递给构造函数? [关闭]

C++:如何将变量作为参数传递给类构造函数