gpt4 book ai didi

javascript - 为什么在 javascript 中使用正则表达式匹配字符串时在输出数组中添加空字符串?

转载 作者:行者123 更新时间:2023-11-29 17:18:31 26 4
gpt4 key购买 nike

我正在尝试学习 javascript 中的 regex。在进行测试时,我对看到输出感到困惑。

你能解释一下为什么在模式中使用 * 而不是 + 时我的输出结果数组有空字符串吗?

PS:所采用的输入只是要学习的简单字符串示例。

这是我的示例代码:

a='bb bbbb bbb'
a.match(/(bb)*/g) // O/P is ["bb","","bbbb","","bb","",""]
a.match(/(bb)+/g) // O/P is ["bb","bbbb","bb"]

最佳答案

*,或Kleene Star , 在正则表达式中表示“零个或多个”,因此它匹配空字符串

+ 表示“一个或多个”,因此它不匹配空字符串


鉴于我们有如下

a = 'bb bbbb bbb';

让我们这样表示:

a = /^bb bbbb bbb$/;

其中 ^ 是字符串的开头,$ 是字符串的结尾。

我们的模式是(bb)*。这意味着引擎将查找两个 b“零次或多次”的序列。这意味着如果找到序列,则模式匹配 bb,否则匹配空字符串

现在我将逐步使用一个点 (.) 来表示正则表达式分析。

步骤

        STRING              MATCH ARRAY
start - /^.bb bbbb bbb$/ -> [ ]
1 - /^bb. bbbb bbb$/ -> [ "bb" ]
2 - /^bb .bbbb bbb$/ -> [ "bb", "" ]
3 - /^bb bbbb. bbb$/ -> [ "bb", "", "bbbb" ]
4 - /^bb bbbb .bbb$/ -> [ "bb", "", "bbbb", "", ]
5 - /^bb bbbb bb.b$/ -> [ "bb", "", "bbbb", "", "bb" ]
6 - /^bb bbbb bbb.$/ -> [ "bb", "", "bbbb", "", "bb", "", ]
7 - /^bb bbbb bbb$./ -> [ "bb", "", "bbbb", "", "bb", "", "" ]

STEP 1 中,我们已经推送了 bb,因为模式匹配一​​个序列。

STEP 2 中,我们压入了 "",因为模式匹配空字符串

STEP 3 中,我们压入了 bbbb,因为该模式匹配两个序列。

第 4 步 -> 第 2 步

第 5 步 -> 第 1 步

STEP 6 中,我们压入了 "",因为模式匹配空字符串,因为只有一个 b被发现了。

最后您遇到了 $ 标记,它再次匹配空字符串

请注意,如果字符串是 "bb bbbb bbbb",则数组将是 ["bb", "", "bbbb", "", "bbbb", ""]

关于javascript - 为什么在 javascript 中使用正则表达式匹配字符串时在输出数组中添加空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674291/

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