正则表达式修改需求:将首尾带单引号的单词作为整体匹配
正则表达式调整需求
当前代码
const regex = /[\s]|('[^']')|[\w-]+|[']/gm;
运行匹配代码:
console.log("'one 'two' three'".match(regex) || []);
当前输出
[ "'", "one", " ", "'", "two", "'", " ", "three", "'" ]
期望输出
[ "'", "one", " ", "'two'", " ", "three", "'" ]
解决方案
原正则的('[^']')分支仅能匹配单引号包裹单个字符的场景,且分支顺序导致单引号会被优先单独匹配。要实现需求,需修改两个点:
- 将匹配单引号包裹内容的分支改为
'[^']+',支持匹配单引号内的任意长度非单引号字符(至少1个) - 调整分支顺序,让完整的
'xxx'结构优先匹配,避免单引号被拆分
修改后的正则:
const regex = /'[^']+'|\s|[\w-]+|'/gm;
内容的提问来源于stack exchange,提问作者Roman Slisarenko
相关产品推荐
相关产品推荐

