gpt4 book ai didi

javascript - 这个正则表达式如何工作?

转载 作者:行者123 更新时间:2023-11-28 12:26:41 26 4
gpt4 key购买 nike

RegExes 让我头疼。我有一个非常简单的正则表达式,但我不明白它是如何工作的。

代码:

var str= "startBlablablablablaend";
var regex = /start(.*?)end/;
var match = str.match(regex);
console.log( match[0] ); //startBlablablablablaend
console.log( match[1] ); //Blablablablabla

我最终想要的是第二个,换句话说,两个分隔符(开始,结束)之间的文本。

我的问题:

  • 它是如何运作的? (请解释每个字符)
  • 为什么它会匹配两个不同的东西?
  • 是否有更好的方法来获取匹配[1]?
  • 如果我想获取所有开始结束实例之间的所有文本,我该怎么做?

对于最后一个问题,我的意思是:

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" ];

谢谢:)

最佳答案

它是如何工作的?

  • start 与字符串中的 start 匹配

  • (.*?) 字符非贪婪匹配

  • end 匹配字符串的结尾

匹配

startBlablablablablaend
|
start

startBlablablablablaend
|
.

startBlablablablablaend
|
.

# and so on since quantifier * matches any number of character. ? makes the match non greedy

startBlablablablablaend
|
end

为什么它匹配两个不同的东西?

它不匹配两个不同的东西

  • match[0] 将包含整个匹配

  • match[1] 将包含第一个捕获组(第一个括号中匹配的部分)

有更好的方法来获得匹配[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" ]

关于javascript - 这个正则表达式如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com