正则表达式匹配以特定字符串开头并以特定字符串结尾的字符串的内容

时间:2014-07-17 21:06:58

标签: javascript regex

如何制作能够提取以下第一个方括号内容的正则表达式?

Block[first_name][value]返回字符串first_name

Block[last_name][value]返回字符串last_name

我尝试过的事情:

这是我目前的正则表达式:http://regex101.com/r/jW0hY1/1

/(?:Block\[).*(?:\[value])/

我首先想到Block[的非捕获匹配。然后我将捕获所有内容,直到][value]开始。相反,这似乎返回整个字符串。

3 个答案:

答案 0 :(得分:0)

从索引1获取匹配的组。

(?:Block\[)([^\]]*)(?:\]\[value\])

DEMO


或者在正则表达式中进行一些更改

(?:Block\[)(.*)(?:\]\[value])

DEMO

答案 1 :(得分:0)

问题是.*尽可能多地占用了字符。请改用非贪婪量词和捕获组:

Block\[(.*?)\]

如果您还需要捕获值,可以使用以下表达式:

Block\[(.*?)\]\[(.*?)\]

编辑:和JS ......

var re = /Block\[(.*?)\]\[(.*?)\]/g;
var match;
while(match = re.exec("Block[first_name][value] Block[last_name][value]")) {
    console.log("Found " + match[1] + " with value: " + match[2]);
}

答案 2 :(得分:0)

正则表达式:(DEMO

(?:Block\[)(.*)(?:\]\[value])

获取内容:

string = "Block[first_name][value]";
result = string.match((/?:Block\[)(.*)(?:\]\[value])/, g);
console.log(result[1]); //first_name