gpt4 book ai didi

javascript - 为什么匹配函数只返回第一个字母?

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:49 25 4
gpt4 key购买 nike

如果元字符 ? 与前面的元素匹配零次或一次,则

为什么

"ab".match(/a?/)

返回["a"],

但是

"ab".match(/b?/)

返回 [""]

?

最佳答案

因为那是第一场比赛。正则表达式首先尝试匹配位置 0,其中正则表达式#1 匹配 a,正则表达式#2 匹配空字符串。然后它尝试匹配位置 1,其中 regex#1 匹配空字符串,regex#2 匹配字母 b。最后,它尝试在位置 3 进行匹配,其中两个正则表达式都匹配空字符串。

将返回的匹配项与全局标志进行比较:

> "ab".match(/a?/)
["a"]
> "ab".match(/a?/g)
["a", "", ""]
> "ab".match(/b?/)
[""]
> "ab".match(/b?/g)
["", "b", ""]

why not [""] is returned in first case?

由于 backtracking 的机制.当尝试匹配某个位置时,引擎将尝试贪婪地1 测试正则表达式的所有字母与字符串的字母。当它使用该方法到达正则表达式的末尾时,匹配成功。当字母不适合时,它会尝试返回正则表达式以查看是否可以遗漏任何内容 - 当使用 *? 等修饰符时 - 或者需要考虑备选方案 (|),然后从那里继续。

示例:在 "ab" 的位置 0 处匹配 /b?/:

//   - "": ✓/b/  - "a": ×/b?/ - "": ✓ - succeed (end of regex)  ^ means here that the "b" token is omitted

示例:匹配 /a?/"ab" 的位置 0:

//  - "": ✓/a/ - "a": ✓ - succeed (end of regex)

示例:在 "abc" 的位置 0 匹配 /ab?(bc)?/

//        - "": ✓/a/       - "a": ✓/ab/      - "ab": ✓/ab(b)/   - "abc": ×/ab(bc)?/ - "ab": ✓ - succeed (end of regex)

1:通常,至少。许多正则表达式风格还提供量词 lazypossessive如果你想控制精确匹配的行为。例如,/ab??(bc)?/ 匹配 "abc"

中的 abc

关于javascript - 为什么匹配函数只返回第一个字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25723434/

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