Javascript 如何从字符串构建RegExp

Javascript 如何从字符串构建RegExp,javascript,Javascript,我有一个字符串和一个匹配的模式,如下所示: var string = 'stackoverflow Javascript Regex Help'; var pattern=/(^stackoverflow Javascript)/; 我正在寻找一种方法来重用我以前的模式,而不必再次重写它。很快,我想在上一个模式的末尾添加一个附加选项(在分割之前匹配一个空格) 但这不起作用。 有什么办法可以做到这一点吗 感谢您的hep。您可以使用RegExp从字符串构建正则表达式: var common

我有一个字符串和一个匹配的模式,如下所示:

var string = 'stackoverflow Javascript Regex Help';    
var pattern=/(^stackoverflow Javascript)/;
我正在寻找一种方法来重用我以前的模式,而不必再次重写它。很快,我想在上一个模式的末尾添加一个附加选项(在分割之前匹配一个空格)

但这不起作用。 有什么办法可以做到这一点吗


感谢您的hep。

您可以使用
RegExp
从字符串构建正则表达式:

var common_pattern = "(^stackoverflow Javascript)";
var extra_pattern = "(.\\S*)"; // need to escape the escape character because the pattern is now a string
var regexp = new RegExp(common_pattern + extra_pattern);

var newString = string.split(regexp);

您可以使用
RegExp
从字符串构建正则表达式:

var common_pattern = "(^stackoverflow Javascript)";
var extra_pattern = "(.\\S*)"; // need to escape the escape character because the pattern is now a string
var regexp = new RegExp(common_pattern + extra_pattern);

var newString = string.split(regexp);

如果您真的想重用该模式,可以使用RegExp的
toString
来完成

本例首先使用数字
1
拆分字符串。然后将数字
2
添加到图案中,以在
12
处拆分

剪报:

问候

编辑:
更新了正确处理修饰符的示例。

如果您确实想重用该模式,可以使用RegExp的
toString
来完成

本例首先使用数字
1
拆分字符串。然后将数字
2
添加到图案中,以在
12
处拆分

剪报:

问候

编辑:
更新了正确处理修饰符的示例。

要重用regex,可以使用
RegExp
构造函数语法。“我正在寻找一种方法,可以重用以前的模式,而不必再次重写它。”-但为什么?这是一种完全没有根据的过早优化。相关:只需根据需要创建正则表达式。扩展现有正则表达式的功能通常是不必要的。要重用regex,可以使用
RegExp
构造函数语法。“我正在寻找一种方法,可以重用以前的模式,而不必再次重写它。”-但为什么?这是一种完全没有根据的过早优化。相关:只需根据需要创建正则表达式。扩展现有正则表达式的功能通常是不必要的。请注意,
common_pattern/pattern
是Q.和string中的正则表达式。这实际上不是重复使用正则表达式。@Marcin你是什么意思?我复制了你的正则表达式,但没有更改它们。
“(.\S*)”
变成了
“(.S*)”
,所以这是不正确的。你的预期产出是什么?我不明白你想做什么。你能给出其他输入和输出的例子吗。。那么:
“stackoverflow Javascript Hip Hop Hoop”。匹配(/^stackoverflow Javascript?(.+)$/)
otuput:
[“stackoverflow Javascript Hip Hop Hoop”,“Hip Hop Hoop”]
。这也可以选择匹配空格。请注意,
common_pattern/pattern
是Q中的正则表达式,这里是字符串。这实际上不是重复使用正则表达式。@Marcin你是什么意思?我复制了你的正则表达式,但没有更改它们。
“(.\S*)”
变成了
“(.S*)”
,所以这是不正确的。你的预期产出是什么?我不明白你想做什么。你能给出其他输入和输出的例子吗。。那么:
“stackoverflow Javascript Hip Hop Hoop”。匹配(/^stackoverflow Javascript?(.+)$/)
otuput:
[“stackoverflow Javascript Hip Hop Hoop”,“Hip Hop Hoop”]
。这也可以选择匹配space.NB!作为Halcyon,我很难弄清楚你到底想要什么,所以这只是一个概念证明。这不是对您的具体示例/问题的确切答案。NB!作为Halcyon,我很难弄清楚你到底想要什么,所以这只是一个概念证明。这并不是你的具体例子/问题的确切答案。
var newPattern = new RegExp(pattern.toString().slice(1,-1) + '2');