我想知道 JavaScript 的 RegExp 引擎是否支持可变长度后向断言?
例如,我试图匹配字符串“ [很多空格和/或制表符]variable length lookbehind ”中的字符串“ variable length ”,我有类似的东西,但它在各种RegExp测试器中并不顺利:
^(?<=[ \t]+).+(?= lookbehind)
如果它是非法模式,那么有什么好的解决方法呢?谢谢!
我想知道 JavaScript 的 RegExp 引擎是否支持可变长度后向断言?
例如,我试图匹配字符串“ [很多空格和/或制表符]variable length lookbehind ”中的字符串“ variable length ”,我有类似的东西,但它在各种RegExp测试器中并不顺利:
^(?<=[ \t]+).+(?= lookbehind)
如果它是非法模式,那么有什么好的解决方法呢?谢谢!
Javascript 根本没有后视功能。Steven Levithan写了一些说来模仿它,这可能会有所帮助。
我不太了解您的示例,因为这似乎符合要求:
/^\s+(.+)lookbehind$/
...匹配一个或多个空白字符,后跟一个或多个任意字符(在捕获组中),后跟单词“lookbehind”。像这样使用:
var str = " variable length lookbehind";
var match = /^\s+(.+)lookbehind$/.exec(str);
产生这个数组:
match[0]: | variable length lookbehind|
match[1]: |variable length|
在 Javascript 中,数组中的第一个条目是整个匹配的字符串,随后的条目是捕获组。
但是您显然对正则表达式有很好的掌握,所以我不确定这就是您要寻找的...
在这个一般领域需要注意的是,Javascript 中的许多 RegExp 引擎实现不能完全正确处理\s
(它们错过了匹配 ASCII 范围以上的一些空白字符);在此处查看 S_REGEXP_WHITESPACE_CHARACTER_CLASS_BUGGY 测试。
Javascript 正则表达式引擎不支持lookbehinds,只支持lookaheads。在这里您可以找到一个模仿解决方案:http: //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
它显示了可以完成修剪的多种方式(其中没有一种需要后视),并且还比较了不同方法的速度。如果最终目标包括去除前导空白,请不要害怕将其分解为多个操作。
有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题 - Jamie Zawinski
我不知道这是否对您使用 RegExp 有帮助,但如果您想删除空格,您可以使用修剪功能
function trimAll(sString) {
while (sString.substring(0, 1) == ' ') {
sString = sString.substring(1, sString.length);
}
while (sString.substring(sString.length - 1, sString.length) == ' ') {
sString = sString.substring(0, sString.length - 1);
}
return sString;
}
否则,如果您想检查字符串是否存在,您可以 在 StackOverflow.com 上使用 indexOf IndexOf