反转含数字单词且保留空格标点的JS代码问题排查
问题原因
当前代码的正则匹配规则不符合需求:
- 现有正则
/[a-z]+/ig仅匹配连续的纯英文字母序列,数字被判定为和空格、标点同类的分隔符,不会被纳入待反转的单词片段。 - 处理测试用例里的
2b片段时,只会匹配到其中的字母b做反转(单个字符反转后无变化),数字2被留在原位,最终这部分输出还是2b,达不到预期的b2效果。
修改方法
只需要调整正则的匹配范围,将数字也纳入待匹配的单词字符集合,让连续的字母+数字片段作为整体参与反转即可,修改后完整代码如下:
function reverseWords(str) { return str.replace(/[a-z0-9]+/ig, function(w){ return w.split('').reverse().join('') }); } console.log(reverseWords('Stri_ng;-% 2b$#e reversed')); // 运行输出:irtS_gn;-% b2$#e desrever,和预期结果完全一致
修改后的逻辑说明:
- 所有连续的字母、数字组合会被识别为需要反转的片段,整体做字符倒序
- 下划线、标点、空格不属于匹配范围,会完全保留原有位置和顺序,不会被改动
- 针对测试用例的处理过程:
Stri倒序为irtS,下划线原样保留,ng倒序为gn- 非匹配片段
;-%完全保留 2b作为连续字母数字块整体倒序为b2,非匹配片段$#原样保留,单独字符e倒序后仍为e- 空格原样保留,
reversed倒序为desrever
内容的提问来源于stack exchange,提问作者Sun Hwang
相关产品推荐
相关产品推荐

