Fwio

JS 中关于正则表达式的字符串操作

正则表达式是专攻字符串操作的工具,JavaScript 用于正则操作的方法主要有如下 6 个:

  • String.prototype.search
  • String.prototype.split
  • String.prototype.match
  • String.prototype.replace
  • RegExp.prototype.test
  • RegExp.prototype.exec

其中exec()的返回值较为复杂:

  • 如果匹配失败,exec()返回null,并将正则表达式对象的lastIndex重置为 0。
  • 如果匹配成功,exec()返回一个数组,并更新正则表达式对象的lastIndex属性。
// ['匹配成功的文本', '捕获项1', '捕获项2', ... , '捕获项n']
const result = regx.exec(str)

result.index // 匹配项在原始字符串中的 0-based 索引
result.input // 匹配的原始字符串
result.groups // 命名捕获组对象(key 是名称,val 是捕获组)

根据 MDN, exec()可用来对单个字符串中的多次匹配结果进行逐条的遍历(包括捕获到的匹配),它是正则表达式的原始方法,许多其他正则表达式 API 会在内部调用exec()

虽然exec()功能很强大,但不能清楚地表示调用的目的,所以 MDN 的建议是:

  • 判断是否匹配RegExp.prototype.test()
  • 找出所有匹配的字符串,而不关心捕获组String.prototype.match()
  • 查找在字符串中匹配的索引String.prototype.search()