JavaScript重复RegEx

时间:2012-09-13 13:52:44

标签: javascript regex

考虑我的几个输入字符串。

  1. http://local.app.com/local/frontend/v12/#/abcde/
  2. http://local.app.com/local/frontend/v12/#/abcde/!/fghij/
  3. http://local.app.com/local/frontend/v12/#/abcde/!/ghijk/!/klmno/
  4. 我写过这个正则表达式,它适用于输入字符串1。

    (?:([a-zA-Z0-9.://_]*)(/#/(?=([a-zA-Z0-9]{5})/)))
    
    Output:
    http://local.app.com/local/frontend/v12/#/,http://local.app.com/local/frontend/v12,/#/,abcde
    

    但是,当我将其扩展为支持输入字符串1,2和3的重复!/.../ 占位符时,它不起作用并且提供空字符串而不是令牌。

    (?:([a-zA-Z0-9.://_]*)(/#/(?=([a-zA-Z0-9]{5})/))(!/(?=([a-zA-Z0-9]{5})/))*)
    
    Output:
    http://local.app.com/local/frontend/v12/#/,http://local.app.com/local/frontend/v12,/#/,abcde,,
    

1 个答案:

答案 0 :(得分:0)

?=实际上是在?=后指定由你指定的位置定义的位置 它(也)不捕获任何可能与环视规范相匹配的内容(?=)。

尝试

(。+?#(/ [a-zA-Z0-9] {5} /)(!/([a-zA-Z0-9] {5})/)*)

(希望我没有写错字,现在无法测试。)

这应该捕获完整的输入,但是内部的各种捕获使您可以访问捕获的“令牌”。

此外,您还可以为内部的各种捕获命名,以便在匹配中更容易识别它们:

(.+?#(/(?<tokenFirst>[a-zA-Z0-9]{5})/)(!/(?<tokenMore>[a-zA-Z0-9]{5})/)*)

成功