2

如果您使用 XRegExp 的“x”标志,则不清楚如何将文字“#”添加到搜索中。

该文件似乎没有产生任何照明。

例如:

> 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 表达式中?我难住了。

4

2 回答 2

2

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

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

> XRegExp("the\\s+[#]\\s+hey",'x').xtest("the # hey")
true
于 2012-10-31T21:59:59.523 回答
0

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

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

于 2015-09-25T22:20:54.897 回答