我真的很喜欢正则表达式。我想知道这种事情是否可以用JavaScript完成。

假设您要匹配foo和bar单词,但仅当它们后面跟有“?”时才匹配要么 ”!”。我知道可以使用x(?=y)来完成这种简单的情况,但是我的目的是要知道是否可以将一个RegEx放置在另一个内部,因为这对于更困难的情况非常有用。

我的意思是这样的:

var regex1 = /foo|bar/;
var regex2 = /{regex1}[\?\!]/;


这将简化非常复杂的正则表达式,并使某些模式可重复使用,而不必在每次需要时都编写相同的模式。如果可以的话,它将类似于RegEx变量。

可能吗?

最佳答案

使用RegExp构造函数。

new RegExp('(?:' + regex1.source + ')[?!]')


regex1.source将给出不带分隔符和标志的实际正则表达式作为字符串,然后可以将其传递给RegExp构造函数以创建新的正则表达式。

另外,请注意,在字符类中使用时,无需转义?!



var regex1 = /foo|bar/;
var regex = new RegExp('(?:' + regex1.source + ')[?!]')
console.log(regex);

10-02 18:52