在XRegExp中查找带有注释的哈希("#"



如果您使用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表达式中添加#字面的字面?我很难过。

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

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

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

flag x的文档在http://xregexp.com/flags/#extendend.

x的效果之一是,忽略了正则模式中的空格。我发现您已经发现,正则表达式中的文字空间可以用s替换(由于字符串逃脱规则,将\s嵌入字符串文字中时)。但是请注意,这正在将您的模式从仅匹配的空间字符到匹配任何空格字符。另外,您可以逃脱空间:XRegExp('the\ \# \ hey', 'x')。或者,您可以以使用[#]的方式使用[ ]。或者您可以做类似XRegExp('the' + XRegExp.escape(' # ') + 'hey', 'x')之类的事情。或者,如果您的图案中有字面的whitespace和#字符,则只是不使用x标志。

最新更新