在RegEx中使用可变长度lookbehind删除前导空格

时间:2010-05-07 08:39:53

标签: javascript regex lookbehind

我想知道JavaScript的RegExp引擎是否支持可变长度的lookbehind断言?

例如,我正在尝试在字符串“ [很多空格和/或标签]变量中匹配字符串”变长“长度看后面“,我有类似的东西,但在各种RegExp测试人员中表现不佳:

^(?<=[ \t]+).+(?= lookbehind)

如果这是一种非法模式,那么它的解决方法是什么?谢谢!

4 个答案:

答案 0 :(得分:2)

Javascript根本没有后视。 Steven Levithan有written up a few says to sort of mimic it,这可能会有所帮助。

我不太明白你的例子,因为这似乎符合条例草案:

/^\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测试here

答案 1 :(得分:2)

Javascript正则表达式引擎不支持lookbehinds,只支持前瞻。 在这里你可以找到一个模仿解决方案: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

答案 2 :(得分:2)

请参阅Faster JavaScript Trim

它显示了许多可以完成修剪的方法(没有一个需要后视)并且还比较了不同方法的速度。如果最终目标包括剥离领先的空白区域,请不要害怕将其分解为多个操作。

  

有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题 - 杰米·扎温斯基

答案 3 :(得分:2)

我不知道这是否会对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;
}

否则,如果要检查字符串存在,可以使用indexOf IndexOf on StackOverflow.com