在 ECMAScript 2019 中,引入了可选捕获组这一新特性,它可以在正则表达式中使用,并提供了更加灵活和方便的匹配方式,本文将介绍可选捕获组的概念、语法和应用,并提供一些示例代码。
可选捕获组的概念
可选捕获组,顾名思义,就是在正则表达式中指定一个捕获组,但是该捕获组可以选择性地匹配文本,即可以匹配也可以不匹配。可选捕获组使用问号和圆括号来表示,如下所示:
/(foo)?bar/
上述正则表达式中的 (foo)?
就是一个可选捕获组,它表示捕获组 (foo)
可以匹配 0 次或者 1 次。
可选捕获组的语法
可选捕获组的语法非常简单,就是在捕获组的圆括号前面加上一个问号,如下所示:
/(foo)?bar/
上述正则表达式中的 (foo)?
就是一个可选捕获组。
需要注意的是,可选捕获组只能出现在捕获组的开头,否则会被解析为正则表达式的特殊字符而导致语法错误。
可选捕获组的应用
可选捕获组在正则表达式中的应用非常广泛,特别是在需要匹配可选项的情况下。下面我们来看几个例子。
匹配电话号码
假设我们需要匹配电话号码,但是电话号码可能有区号也可能没有区号,那么我们可以使用可选捕获组来匹配。示例代码如下:
const phoneReg = /^(\d{3}-)?\d{8}$/; console.log(phoneReg.test('12345678')); // true console.log(phoneReg.test('010-12345678')); // true
上述代码中的正则表达式 /^(\d{3}-)?\d{8}$/
中的 (\d{3}-)?
就是可选捕获组,它表示区号可以匹配 0 次或者 1 次。
匹配 URL
假设我们需要匹配 URL,但是 URL 可能没有协议也可能没有路径,那么我们可以使用可选捕获组来匹配。示例代码如下:
const urlReg = /^((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)?$/; console.log(urlReg.test('www.example.com')); // true console.log(urlReg.test('https://www.example.com')); // true console.log(urlReg.test('https://www.example.com/path/to/file.html')); // true
上述代码中的正则表达式 /^((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)?$/
中的 ((https?:\/\/)?
和 (\/\S*)?)
就是可选捕获组,它们分别表示协议和路径可以匹配 0 次或者 1 次。
总结
本文介绍了 ECMAScript 2019 的可选捕获组的概念、语法和应用,并提供了一些示例代码。可选捕获组可以使正则表达式更加灵活和方便,特别是在需要匹配可选项的情况下,可以提高正则表达式的效率和准确性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657ed0f8d2f5e1655d9b0bcd