限制正则​​表达式范围以仅匹配代码段中的项目

时间:2014-10-13 16:49:06

标签: regex

这是一般的正则表达式问题。

假设我有以下代码:

function (item1, item2, item3) {
    var item4 = null
    var item5 = null
}

我知道这个javascript,但我不想要一个特定于JavaScript的答案:我对纯正的正则表达式答案感到好奇。

假设我想编写匹配任何以" item"开头的单词的正则表达式,但我需要在括号之间的匹配。

所以我的问题是:有没有办法编写一个正则表达式查询,该查询匹配以item开头但又在parens之间的所有内容?就像一种将我的正则表达式范围限制在parens中的东西的方法?

更新:正如人们所知,我在问,因为我正在研究Atom(文本编辑器)的语言支持,据我所知,它只支持纯正则表达式匹配模式以添加语言样式。因此,即使我正在解析JS,我仍然坚持使用纯正则表达式。

2 个答案:

答案 0 :(得分:0)

拉出带括号的东西,然后查看它们。

str="function (item1, item2, item3) {\
    var item4 = null\
    var item5 = null\
}";

var results = [].concat(
    str.match(/\(.*?\)/g)
        .map(function(submatch) {
            return submatch.match(/\bitem\w*\b/g);
        })
);

document.write(results);

此代码首先调用String#match来检索输入的所有带括号的部分,因此在这种情况下它返回['(item, item2, item3)'](包含一个元素的数组)。然后,它会调用该数组上的Array#map,将每个元素转换为item*的匹配列表(\b匹配字边界,\w匹配字母数字)。由于结果现在是嵌套数组([['item1', 'item2', item3']]),我们使用Array#concat将其展平。

答案 1 :(得分:0)

你可以试试下面的正则表达式,

(?:[^()]*(?=\()|[^()]*$)(*SKIP)(*F)|item\w+

DEMO