如何在JavaScript的正则表达式中包含内联注释

如何在JavaScript的正则表达式中包含内联注释,javascript,regex,comments,emulation,inline-code,Javascript,Regex,Comments,Emulation,Inline Code,当字符串传递给RegExp构造函数时,内联注释起作用: RegExp("foo"/*bar*/).test("foo") 但不是用表情。对于RegExp对象,JavaScript中是否有任何等效或替代方法可供仿真?除了使用零长度子表达式之外,这是不可能的。“评论”的例子: 这种前瞻总是匹配的,因为显然a-z后面还有一个空字符串。Javascript既不支持x修饰符,也不支持内联注释(?#注释) 我想,您最好使用RegExp构造函数,将每一行写在一个单独的字符串中,并将它们连接起来(字符串之间带

当字符串传递给RegExp构造函数时,内联注释起作用:

RegExp("foo"/*bar*/).test("foo")

但不是用表情。对于RegExp对象,JavaScript中是否有任何等效或替代方法可供仿真?

除了使用零长度子表达式之外,这是不可能的。“评论”的例子:


这种前瞻总是匹配的,因为显然
a-z
后面还有一个空字符串。

Javascript既不支持
x
修饰符,也不支持内联注释
(?#注释)

我想,您最好使用
RegExp
构造函数,将每一行写在一个单独的字符串中,并将它们连接起来(字符串之间带有注释):


@m、 buettner
(?=|…)
就足够了。它的意思是:如果它是
后接“
后接“…”
,则匹配。显然,第一个陈述是正确的,因此前瞻没有负面影响。是的,这两个(我的和你的第二个变体)是等价的,我在你编辑第二个变体之前发表了我的评论;)。消极的前瞻版本是危险的,因为无论多么小,字符串总是有可能在匹配后包含注释,因此无法匹配。带空字符串的正向前瞻是一种方法。您也可以执行
(?:注释在这里){0}
,但这很棘手,因为使其成为注释的重要部分是
{0}
,它位于末尾,因此可能会被忽略。@MarkReed更容易出错/可读性较差,在我的回答中使用了比两种前瞻性方法更多的字符。我对你之前的评论投了更高的票,因为这是真的(尽管可能性很小,特别是在展望之后出现与展望本身相矛盾的事情时)。对否决票有什么评论吗?我希望新手能提供这种解决方案,而不是你@m.buettner!你没有更好的解决办法吗@Ω好吧,我想它比在每个正则表达式上运行正则表达式替换要少一些开销。另外,提出非黑客解决方案有什么错?至少这个版本允许评论中有任何字符串,没有任何警告。我从来没有说过这是错误的,你的答案已经被提升了。我只是说,我期待的不仅仅是简单的解决方案@Ω很抱歉让您失望。请参阅链接问题中的我的
makeExtendedRegExp
函数,以模拟
x
修饰符
/[a-z](?!<-- Any letter)/
/[a-z](?=|<-- Any letter)/
RegExp(
    "foo" + // match a foo
    "bar" + // followed by a bar
    "$"     // at the end of the string
).test("somefoobar");