跳转到主要内容
模块 7 · 第 4 课(共 4)课程中的28/32~10 min
模块课程(4/4)

用正则表达式分割

String.prototype.split(separator) 不仅接受固定字符串,还接受 还有一个 regex 作为分隔符。这使其成为标记化的强大工具 结构化文本。

JS
'uno, due,tre  quattro'.split(/[,\s]+/);
// ["uno", "due", "tre", "quattro"]

正则表达式 /[,\s]+/ 匹配“一个或多个逗号或空格”: split 在任何复合分隔符上分割。

典型案例

  • 宽容的 CSV:text.split(/\s*,\s*/) 处理逗号周围的空格。
  • 朴素分词器:text.split(/\s+/) 提取单词。
  • 保留分隔符:如果正则表达式包含捕获组,则 组的内容包含在结果数组中。
JS
'a=1; b=2; c=3'.split(/(;)\s*/);
// ["a=1", ";", "b=2", ";", "c=3"]

如果没有 () 组,分号就会消失。使用 (;) 你可以保留它 在结果中。

在拆分操作中保留分隔符

如果将分割分隔符放在捕获括号内,则 String.prototype.split 的输出将包含分隔符本身作为最终数组中的元素,而不是丢弃它们。

尝试一下

锻炼#regex.m7.l4.e1
尝试:0加载中...

查找每个允许的 CSV 分隔符:逗号周围带有可选空格。这样您就可以在 split 中使用它来标记列表。

正在加载编辑器...
显示提示

在逗号前后使用 \\s* 来吸收任何可选空格。

3 次尝试后可用的解决方案

复习练习

锻炼#regex.m7.l4.e2
尝试:0加载中...

查找每个“空格或分号”分隔符(一个或多个)。这种分割方式会将文本标记为单词。

正在加载编辑器...
显示提示

结合 \\s 和 ;在带有 + 量词的类 [\\s;] 中。

3 次尝试后可用的解决方案

额外的挑战

锻炼#regex.m7.l4.e3
尝试:0加载中...

Write a regex to use in a split that separates numbers while keeping math operators `+`, `-`, `*`, `/` as elements of the array.

正在加载编辑器...
显示提示

Enclose the math operators character class in capture parentheses to preserve them in the split array.

3 次尝试后可用的解决方案