RegExes
让我头疼。我有一个非常简单的regex
,但我不明白它是如何工作的。
代码:
var str= "startBlablablablablaend";
var regex = /start(.*?)end/;
var match = str.match(regex);
console.log( match[0] ); //startBlablablablablaend
console.log( match[1] ); //Blablablablabla
我最终想要的是第二个,换句话说,两个分隔符之间的文本(开始,结束)。
我的问题:
对于最后一个问题,我的意思是:
var str = "startBla1end startBla2end startBla3end";
var regex = /start(.*?)end/gmi;
var match = str.match(regex);
console.log( match ); // [ "startBla1end" , "startBla2end" , "startBla3end" ]
我需要的是:
console.log( match ); // [ "Bla1" , "Bla2" , "Bla3" ];
谢谢:)
答案 0 :(得分:4)
它是如何运作的?
start
匹配字符串
start
(.*?)
非贪婪的角色匹配
end
匹配字符串中的结尾
匹配
startBlablablablablaend
|
start
startBlablablablablaend
|
.
startBlablablablablaend
|
.
# and so on since quantifier * matches any number of character. ? makes the match non greedy
startBlablablablablaend
|
end
为什么它会匹配两个不同的东西?
它不匹配2个不同的东西
match[0]
将包含整个匹配
match[1]
将包含第一个捕获组(在第一个paranthesis中匹配的部分)
是否有更好的方法来获得匹配[1]?
简短回答否
如果您使用的是javascript以外的语言。它可能使用环顾四周
(?<=start)(.*?)(?=end)
#Blablablablabla
注意这不适用于javascript,因为它不支持负面的背后隐藏
上一个问题
从单个匹配声明中获得的最佳效果是
var str = "startBla1end startBla2end startBla3end";
var regex = /start(.*?)(?=end)/gmi;
var match = str.match(regex);
console.log( match ); // [ "startBla" , "startBla2" , "startBla3" ]
答案 1 :(得分:1)
你不需要做太多努力。
试试这个正则表达式:
start(.*)end
您可以查看之前已经回答的stackoverflow问题。
Regular Expression to get a string between two strings in Javascript
希望它有所帮助。
答案 2 :(得分:1)
要解决上一个问题,您可以拆分字符串并进行迭代:
var str = "startBla1end startBla2end startBla3end";
var str_array = str.split(" ");
然后使用现有代码遍历str_array的每个元素,以提取每个Bla#substring。