能否用JavaScript正则引擎创建符合指定匹配规则的字符类?
解决方案:构建符合需求的正则匹配规则
当然可以实现!不过要提个关键点:空字符(零长度匹配)没法直接放进正则的字符类[]里,因为字符类只能匹配单个字符。我们可以用分支|把字符类和空选项结合起来,这样就能覆盖你所有的需求了。
分步拆解需求对应的正则部分:
- 匹配英文双引号
":直接写"(JavaScript正则字面量里无需转义,用字符串构造正则时要写成\") - 匹配前面带空格的英文双引号:也就是
"(空格+引号),可以用?"简化为可选空格的形式 - 匹配英文句点
.:正则里要转义成\.(因为.是匹配任意字符的通配符) - 匹配英文逗号
,:直接写,即可 - 匹配
[SM_l]里的任意字符:直接用字符类[SM_l](_和l都是普通字符,无需转义) - 匹配空字符:在分支末尾用
|后留空即可,代表零长度匹配
最终的正则表达式
把这些整合起来,用非捕获分组(?:...)组合分支,最终精简版的正则可以写成:
/(?: ?"|\.|,|[SM_l]|)/
如果是用字符串构造正则(比如动态生成场景),要注意转义特殊字符:
new RegExp('(?: ?"|\\.|,|[SM_l]|)')
简单解释
?"表示前面的空格是可选的,同时覆盖了“单独引号”和“带空格的引号”两种情况(?:...)是无捕获分组,用来把多个分支打包,避免生成不必要的捕获组- 最后的
|后留空就是匹配你需要的零长度空字符
这个正则完全可以匹配你列出的所有内容:单独的英文引号、带空格的英文引号、英文句点、英文逗号、S/M/_/l中的任意一个字符,或者空字符啦。
内容的提问来源于stack exchange,提问作者Foobar
相关产品推荐
相关产品推荐

