我正在尝试从字符串中提取 $()中的数据。 我的字符串看起来像那样
$(123=tr@e:123)124rt12$(=ttre@tre)frg12<>$(rez45)
基本上 $()内和 $()之间可能有任何内容。 但是这里不能是$()中的任何$()。
到目前为止,这是我无法使用的
var reg = new RegExp('\\$\\(.*(?![\\(])\\'), 'g');
var match = reg.exec(mystring);
答案 0 :(得分:3)
您可以试试这个\\$\\([^(]*\\)
:
var mystring = "$(123=tr@e:123)124rt12$(=ttre@tre)frg12<>$(rez45)"
var reg = new RegExp('\\$\\([^(]*\\)', 'g');
console.log(reg.exec(mystring));
console.log(reg.exec(mystring));
console.log(reg.exec(mystring));
&#13;
您可以使用match
收集字符串中正则表达式模式的所有匹配项:
var mystring = "$(123=tr@e:123)124rt12$(=ttre@tre)frg12<>$(rez45)"
var reg = new RegExp('\\$\\([^(]*\\)', 'g');
console.log(mystring.match(reg));
&#13;
答案 1 :(得分:3)
要捕获$()内的所有内容,请使用这样的惰性模式:(?:\$\()(.*?)(?:\))
const regex = /(?:\$\()(.*?)(?:\))/g;
const str = `\$(123=tr@e:123)124rt12\$(=ttre@tre)frg12<>\$(rez45)`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
PS:使用正面Lookar而不是非捕获组是有利的,但JavaScript只支持Lookaheads。
答案 2 :(得分:0)
我正在尝试从字符串中提取$()内的数据。
您可以.split()
与RegExp
/\)[^$]+|[$()]/
一起使用")"
分隔字符串,后跟一个或多个不是"$"
或"$"
的字符,"("
和")"
个字符,使用.filter()
返回删除了空字符串的数组
var mystring = "$(123=tr@e:123)124rt12$(=ttre@tre)frg12<>$(rez45)";
var reg = /\)[^$]+|[$()]/;
var res = mystring.split(reg).filter(Boolean);
console.log(res);