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

标签 javascript regex

我正在尝试学习 JavaScript 中的正则表达式。在进行测试时,我对输出感到困惑。

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

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/

相关文章:

javascript - 如何在 EXTJS 中添加位于另一个网格面板内的 Ext.window.window 模式

Java - 正则表达式

JavaScript:从表配置字符串中提取列标题

regex - 使用正则表达式和 sed 过滤掉 IP

javascript - 通过CSS获取css值并在Selenium中使用

javascript - 递归 setTimeout 调用是否会导致闭包链内存泄漏?

javascript - return 是否隐式添加到回调函数中?

javascript - 单击更改文本并继续更改

java - 如何清理文件,替换不需要的分隔符、运算符、字符串文字

css - 如何使用正则表达式找到大于 100% 的值?