正则表达式捕获:在捕获组中获取整个匹配

时间:2013-10-07 09:40:45

标签: javascript regex

我不能按照我的意愿让这个捕获工作:

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

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"]

有没有办法用正则表达式实现这一目标?我希望避免使用; ...

拆分字符串

1 个答案:

答案 0 :(得分:1)

你可以使用这样的模式:

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

哪个会给你:

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

此模式将符合以下顺序:

  • 在第1组中捕获的零个或多个下划线
  • 分号
  • 第2组中捕获的一个或多个单词字符
  • 分号
  • 在第3组中捕获的一个或多个单词字符
  • 分号