【问题标题】:Remove leading whitespaces using variable length lookbehind in RegExp在 RegExp 中使用可变长度后视删除前导空格
【发布时间】:2010-05-07 08:39:53
【问题描述】:

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

例如,我正在尝试匹配字符串“[很多空格和/或制表符]变量中的字符串“variable length”长度向后看”,我有这样的东西,但它在各种 RegExp 测试器中并不顺利:

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

如果它是非法模式,有什么好的解决方法?谢谢!

【问题讨论】:

    标签: javascript regex lookbehind


    【解决方案1】:

    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

    【讨论】:

    • 嗨。不,实际上我对正则表达式根本没有很好的理解,如您的示例所示,这比我想出的要直观得多。还有关于数组的好信息,我没想到哈哈。是的,在这种情况下 match[1] 将是我正在寻找的。​​span>
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我不知道这是否对您使用 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

      【讨论】:

        【解决方案4】:

        Faster JavaScript Trim

        它显示了可以完成修剪的多种方式(其中没有一种需要后视),并且还比较了不同方法的速度。如果最终目标包括去除前导空白,请不要害怕将其分解为多个操作。

        有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题 - Jamie Zawinski

        【讨论】:

        • +1 我不想承认,但这是真的。虽然我想做的不完全是修剪操作,但我可以使用分组。:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多