JS Regex在括号中提取数据

时间:2017-10-27 01:47:37

标签: javascript regex

我正在尝试从字符串中提取 $()中的数据。 我的字符串看起来像那样

$(123=tr@e:123)124rt12$(=ttre@tre)frg12<>$(rez45)

基本上 $()内和 $()之间可能有任何内容。 但是这里不能是$()中的任何$()。

到目前为止,这是我无法使用的

var reg = new RegExp('\\$\\(.*(?![\\(])\\'), 'g');
var match = reg.exec(mystring);

3 个答案:

答案 0 :(得分:3)

您可以试试这个\\$\\([^(]*\\)

&#13;
&#13;
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;
&#13;
&#13;

您可以使用match收集字符串中正则表达式模式的所有匹配项:

&#13;
&#13;
var mystring = "$(123=tr@e:123)124rt12$(=ttre@tre)frg12<>$(rez45)"

var reg = new RegExp('\\$\\([^(]*\\)', 'g');

console.log(mystring.match(reg));
&#13;
&#13;
&#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);