代码之家  ›  专栏  ›  技术社区  ›  Daniel

使用匹配的表达式作为匹配的起点

  •  0
  • Daniel  · 技术社区  · 14 年前

    我在用 http://regexpal.com/ 一些前瞻性和前瞻性在JavaScript中不受支持。

    是否仍然可以使用匹配的条件来表示匹配的开始,以及另一个条件来表示匹配的结束,而不包括在匹配中。

    例如,如果我使用[tag]只获取标签, 或者如果我有{ abc 1 , def }匹配 美国广播公司1 DEF

    当字符串较短时,很容易得到这个值,但是我希望它从较长的字符串中找到这个值,只有当这个组被包围并且单个项目被`字符包围时。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Tim Pietzcker    14 年前

    如果您没有像在javascript中那样的lookback,那么您可以使用非捕获组(或者根本没有组)而不是(正的)lookback。当然,这将成为整个匹配的一部分,因此需要将实际要匹配的部分括在捕获括号中,然后评估不是整个匹配,而是仅此捕获组。

    因此,而不是

    (?<=foo)bar
    

    你可以使用

    foo(bar)
    

    在第一个版本中,匹配结果 bar 将在backreference中 $0 . 在第二个版本中 0美元 将相等 foobar 但是 $1 将包含 酒吧 .

    但是,如果一个匹配和下一个匹配的lookback重叠,这将失败。例如,如果要匹配由字母包围的数字。

    (?<=[a-z])[0-9](?=[a-z])
    

    将匹配中的所有数字 a1b2c3d 但是

    [a-z]([0-9])[a-z]
    

    将只匹配 1 3 .

        2
  •  0
  •   R. Hill    14 年前

    我想你总是可以使用分组:

    m = "blah{abc 1, def}blah".match(/\{(.*?)\}/)
    

    在哪里?

    m[0] = "{abc 1, def}"
    m[1] = "abc 1, def"
    

    该regexpal页不显示结果子组(如果有)。