在XRegExp中使用注释查找哈希(“#”)

时间:2012-10-31 21:57:54

标签: javascript regex xregexp

如果您使用' x' XRegExp的标志,目前还不清楚如何添加文字'#'搜索。

The documentation似乎没有任何照明。

例如:

> XRegExp("the # hey",'x').toString()
'/the(?:)/'

这是预期的 - 在'#'之后的一切是评论并被忽略。

明显的解决方案,而不是忽略该行上的#及以下内容,通常会(基于我的有限经验)领先于转义修饰符,例如\\

> XRegExp("the \# hey",'x').toString()
'/the(?:)/'

> XRegExp("the \\# hey",'x').toString()
'/the(?:)\\#(?:)hey/'

不幸的是,没有按预期工作,前面有明显的原因,后者产生:

> XRegExp("the \\# hey",'x').xtest("the # hey")
false

甚至在更有害的情况下我们必须修改输入数据:

> XRegExp("the \\# hey",'x').xtest("the \\# hey")
false

替代规范转义将使用双哈希(##),但这也不起作用:

> XRegExp("the ## hey",'x').toString()
'/the(?:)/'

所以问题就变成了,如何将#文字添加到使用' x'的XRegExp表达式中?旗?我很难过。

2 个答案:

答案 0 :(得分:2)

我找到了答案,请注意我上面的测试不起作用,因为空格应该由\\s+替换。

答案似乎是使用[#]例如

> XRegExp("the\\s+[#]\\s+hey",'x').xtest("the # hey")
true

答案 1 :(得分:0)

标记x的文档位于http://xregexp.com/flags/#extended

x的一个影响是你的正则表达式模式中的空格被忽略。我发现你发现你的正则表达式中的文字空格可以用\s\\s替换,因为字符串转义规则嵌入了字符串文字中。但请注意,这样可以将您的模式从仅匹配空格字符更改为匹配任何空格字符。或者你可以逃避空间:XRegExp('the\\ \\# \\ hey', 'x')。或者您可以像使用[ ]一样使用[#]。或者你可以做XRegExp('the' + XRegExp.escape(' # ') + 'hey', 'x')之类的事情。或者,如果您的模式中有文字空格和x字符,则不要使用#标记。