1

我无法按照我的意愿进行此捕获:

我的目标是在字符串中捕获第一个捕获组的长度:

var regex = /(_)?;([\w]+);([\w]+);/;
var string = "____;foo;bar;";
var matches = regex.exec(string);

console.log(matches); // outputs  ["_;foo;bar;", "_", "foo", "bar"]

如您所见,matches[1]它包含用于取消下划线的捕获组,但给了我匹配的字符,而不是所有下划线。我期望的是这个结果:

["_;foo;bar;", "_____", "foo", "bar"]

有没有办法用正则表达式来实现这一点?我宁愿避免用;...分割字符串

4

1 回答 1

1

你可以使用这样的模式:

/(_*);(\w+);(\w+);/

这会给你:

["_____;foo;bar;", "_____", "foo", "bar"]

此模式将匹配以下序列:

  • 零个或多个下划线,在第 1 组中捕获
  • 分号
  • 一个或多个单词字符,在第 2 组中捕获
  • 分号
  • 一个或多个单词字符,在第 3 组中捕获
  • 分号
于 2013-10-07T09:43:44.930 回答