簡體   English   中英

Javascript令人困惑的正則表達式組

[英]Javascript Confusing Regex Groups

我有一個正則表達式,它在regexr.com上很好用,但不適用於Javascript。

這是regexr的鏈接http://regexr.com/3b780

以下是我的Javascript嘗試

      var expression="--user=foo:This is description"
      var regexExp = new RegExp("(?:=)(.[^:]+)|(?::)(.[^=]+)|(.[^=^:]+)","g");
      console.log(regexExp.exec(expression))

哪個返回

[ '--user',
  undefined,
  undefined,
  '--user',
  index: 0,
  input: '--user=foo:This is description' 
]

預期產量

[ '--user',
  'foo',
  'This is description',
  '--user',
  index: 0,
  input: '--user=foo:This is description' 
]

具有全局正則表達式的RegExp#exec 需要多次調用以獲取所有匹配項 您可以更接近String#match (順便說一下,使用正則表達式文字):

var expression = "--user=foo:This is description";
var re = /(?:=)(.[^:]+)|(?::)(.[^=]+)|(.[^=^:]+)/g;
console.log(expression.match(re));

結果是:

Array [ "--user", "=foo", ":This is description" ]

但是,這是一個非常不尋常的正則表達式。 非捕獲組是無用的,捕獲組永遠不會屬於同一匹配項,並且[^=^:]可能沒有預期的效果。 也許像這樣吧?

var re = /(--.+?)=(.+?):(.+)/;
var expression = "--user=foo:This is description";
console.log(re.exec(expression));

導致:

Array [ "--user=foo:This is description", "--user", "foo", "This is description" ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM