Javascript 混淆了正则表达式组



我有正则表达式,它对 regexr.com 很好用,但不适用于Javascript。

这是正则表达式 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" ]

最新更新