我想提取文本,并在括号中加上多个一对一的字符串。
示例:
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
我希望“文本”将包含在正则表达式中,如本文顶部示例中所述。
先谢谢了。
答案 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
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]);
}