正则表达式提取文本后跟括号(多个一对一的字符串)

时间:2018-08-11 18:13:22

标签: javascript regex

我想提取文本,并在括号中加上多个一对一的字符串。

示例:

text(text1) password(password1) in table(table_name) with some random text

所以,我想像这样将它们提取到表中

COL1          COL2
-------------------
text          text1
password      password1
table         table_name

所以在表中,我的意思是可以使用它们并在需要时调用它们。

我尝试过的事情:

此正则表达式只允许我提取第一个括号,但不包括“ text”,这不是我想要的:

"text(text1) password(password1) in table(table_name) with some random text".match(/\(([^)]+)\)/)[1]

返回:

text1

我希望“文本”将包含在正则表达式中,如本文顶部示例中所述。

先谢谢了。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

var str = "text(text1) password(password1) in table(table_name) with some random text";
var exp = new RegExp("([a-z]+)\\(([^)]+)\\)", "ig");

var groups = []
var matches
while(true){
  matches = exp.exec(str) 
  if (!matches) {
     break;
  }
  groups.push([matches[1], matches[2]])
}
console.log(groups)

您可能应该更改正则表达式,因为现在,括号前的部分只能包含字母。

答案 1 :(得分:1)

第二部分的正则表达式没问题,但是您应该使用exec而不是match并使用/g(全局)标志。

对于第一个捕获组,您不能匹配空格字符\S

(\S+)\(([^)]+)\)

const regex = /(\S+)\(([^)]+)\)/g;
const str = `text(text1) password(password1) in table(table_name) with some random text`;
let m;

while ((m = regex.exec(str)) !== null) {
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  console.log(m[1], m[2]);
}