如何制作能够提取以下第一个方括号内容的正则表达式?
Block[first_name][value]
返回字符串first_name
。
Block[last_name][value]
返回字符串last_name
。
我尝试过的事情:
这是我目前的正则表达式:http://regex101.com/r/jW0hY1/1
/(?:Block\[).*(?:\[value])/
我首先想到Block[
的非捕获匹配。然后我将捕获所有内容,直到][value]
开始。相反,这似乎返回整个字符串。
答案 0 :(得分:0)
从索引1获取匹配的组。
(?:Block\[)([^\]]*)(?:\]\[value\])
或者在正则表达式中进行一些更改
(?:Block\[)(.*)(?:\]\[value])
答案 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