【发布时间】:2011-08-05 13:25:42
【问题描述】:
我想在字符串中进行字符串搜索。简单地说MySTR.search(Needle)。
当此needle 字符串包含特殊的正则表达式字符(如 *、+ 等)时会出现问题。它失败并出现错误invalid quantifier。
我浏览了网页,发现可以使用\Q some string \E 转义字符串。
但是,这并不总是产生所需的行为。例如:
var sNeedle = '*Stars!*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
结果为 -1。好的。
var sNeedle = '**Stars!**';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
结果是“无效的量词”。发生这种情况是因为 2 个或更多特殊字符相互“接触”,因为:
var sNeedle = '*Dont touch me*Stars!*Dont touch me*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
可以正常工作。
我知道我可以创建一个函数 escapeAllBadChars(sInStr) 并在每个可能的特殊正则表达式字符之前添加双斜杠,但我想知道是否有更简单的方法来做到这一点?
【问题讨论】:
-
\Q...\E 在 Perl 中工作,但不确定其他任何地方。
-
我认为你的第三个例子中的明星没有按照你的想法做。它们不会被解释为文字 * 字符,而是作为它们之前字符的量词。
-
@Matthew,在 Java 中它的工作方式与在 Perl 中相同(不确定其他语言)。
标签: javascript regex escaping