如何正确拆分字符串、符号与空格?正则表达式优化求助
解决正则拆分非单词字符与空格的问题
修改后的正则表达式
const regex = /[^\w\s]+|\s|[\w][\w'`’‘-]*[\w-]|'|\w+/gm;
验证代码与结果
运行以下代码:
console.log("one!@# two!!?".match(regex) || []);
输出结果:
["one", "!@#", " ", "two", "!!?"]
调整说明
原正则里的\W包含空格字符,导致!@# 这类符号加空格的内容会被合并成一个匹配项。修改后做了两处关键调整:
- 把非空格的非单词字符(
[^\w\s]+)作为优先匹配分支,确保连续符号(如!@#)被单独捕获 - 新增
\s分支单独匹配空格,让空格从原非单词字符组中分离出来 - 保留原有单词匹配逻辑,不影响英文单词(含特殊符号的单词)的提取
内容的提问来源于stack exchange,提问作者Roman Slisarenko
相关产品推荐
相关产品推荐

