Javascript Regexp 遍历所有匹配项

阅读时长 4 分钟读完

在 JavaScript 中,正则表达式(RegExp)是一种强大的工具,可以帮助您在字符串中查找和操作模式。其中一个功能是遍历所有匹配项。

什么是匹配项?

当使用正则表达式搜索字符串时,它将返回第一个与模式匹配的子字符串。如果您想继续搜索并获取所有匹配项,那么您需要使用循环来处理每个匹配项。

例如,在以下代码中,我们使用正则表达式 /hello/g 来查找所有出现在字符串中的 "hello" 子串,并将其放入数组中:

-- -------------------- ---- -------
----- --- - ------ ------ ----- ----------
----- ----- - ---------
----- ------- - ---

--- ------
----- ------- - ---------------- --- ----- -
  -----------------------
-

--------------------- -- --------- --------

该代码创建了一个空数组 matches,然后使用 while 循环来重复执行正则表达式的 .exec() 方法,直到在字符串中找不到任何其他匹配项为止。每次迭代时,.exec() 方法都会返回一个数组,其中包含有关当前匹配项的信息。我们将该匹配项的第一个元素(也就是整个匹配字符串本身)添加到 matches 数组中。

最后,我们打印出 matches 数组,其中存储了两个匹配项。

捕获分组

您还可以使用正则表达式中的捕获分组来获取有关匹配项的更多信息。捕获分组是将模式的一部分括在圆括号内,以便能够提取和操作该部分。

例如,在以下代码中,我们使用正则表达式 /(\w+) (\w+)/g 来查找所有两个单词组成的子串,并将它们拆分为其各自的单词:

-- -------------------- ---- -------
----- --- - ------ ------ ------- ----------
----- ----- - ------ --------
----- ------- - ---

--- ------
----- ------- - ---------------- --- ----- -
  ----------------------- --------- -----------
-

--------------------- -- -------- ------- -------- --------- --------- ---------- ---------- ------------

注意,在这个例子中,我们使用了两个捕获分组 (\w+) 来匹配两个单词。每次迭代时,我们将整个匹配字符串及其两个捕获分组添加到 matches 数组中。

结论

遍历所有匹配项是处理文本数据的常见需求。通过 JavaScript 中的正则表达式,您可以轻松地查找和操作模式,从而实现该目标。

记得要用 g 标志来指明全局搜索,否则 .exec() 方法只会返回第一个匹配项。

同时,注意每次迭代时 .exec() 方法都会更新正则表达式的 lastIndex 属性,以便于下一次迭代的搜索定位。

示例代码

-- -------------------- ---- -------
----- --- - ------ ------ ----- ----------
----- ----- - ---------
----- ------- - ---

--- ------
----- ------- - ---------------- --- ----- -
  -----------------------
-

--------------------- -- --------- --------

----- ---- - ------ ------ ------- ----------
----- ------ - ------ --------
----- -------- - ---

--- -------
----- -------- - ------------------ --- ----- -
  ------------------------- ---------- ------------
-

---------------------- -- -------- ------- -------- --------- --------- ---------- ---------- ------------

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/27321

纠错
反馈