如果您使用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
标志。