gpt4 book ai didi

javascript - 带星号量词的正则表达式

转载 作者:行者123 更新时间:2023-11-28 13:36:36 25 4
gpt4 key购买 nike

这个documentation关于星号量词的说明:

Matches the preceding character 0 or more times.

它的工作原理如下:

var regex = /<[A-Za-z][A-Za-z0-9]*>/;
var str = "<html>";
console.log(str.match(regex));

上面的结果是:<html>

但是当尝试使用以下代码来获取下面字符串中的所有“r”时,它只返回第一个“r”。这是为什么?

var regex = /r*/;
var str = "rodriguez";
console.log(str.match(regex));

为什么在第一个示例中它会导致“前面的”字符/标记重复“0 次或多次”,但在第二个示例中却不会?

最佳答案

var regex = /r*/;
var str = "rodriguez";

正则表达式引擎将首先尝试从左到右匹配 rodriguez 中的 r,并且由于存在匹配,因此它会消耗该匹配。

然后,正则表达式引擎尝试匹配另一个 r,但下一个字符是 o,因此它停在那里。

如果没有全局标志g(如var regex =/r*/g;使用),一旦正则表达式出现,正则表达式引擎将停止寻找更多匹配项。满意。

尝试使用:

var regex = /a*/;
var str = "cabbage";

尽管字符串中有 a,但匹配结果将是一个空字符串!这是因为,正则表达式引擎首先尝试从左到右在 cabbage 中查找 a,但第一个字符是 c。由于这不匹配,因此正则表达式尝试匹配 0 次。至此,正则表达式满足,匹配到此结束。

可能值得指出的是 * 本身是贪婪的,这意味着它会首先尝试匹配尽可能多的内容(描述中的“或更多”部分),然后再尝试匹配 0次。

要从 rodriguez 获取所有 r,您将需要前面提到的全局标志:

var regex = /r*/g;
var str = "rodriguez";

您将获得所有 r 以及其中的所有空字符串,因为 * 也匹配“nothing”。

关于javascript - 带星号量词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20922143/

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