首页 > 解决方案 > 正则表达式删除用加号替换所有空格和逗号

问题描述

我有这样的查询

2258, Hampton Street, Columbia, SC, USA

我需要用加号替换所有空格和逗号,所以我这样做:

query = query.replace(/,? /g, '+');

问题是当有多个逗号或空格时它不起作用(或者如果在查询的末尾或开头有空格或逗号。所以我需要涵盖这种情况:

2258, Hampton Street, Columbia, SC, USA
2258, Hampton Street, Columbia, SC,, USA, 
2258, Hampton Street, Columbia, SC, USA ,
 ,2258, Hampton Street, Columbia, SC, USA
, 2258, Hampton Street, Columbia, SC, USA
   2258, Hampton Street, Columbia, SC, USA
,,2258, Hampton   Street, Columbia, SC, USA
2258, Hampton Street,,,, Columbia, SC, USA 
2258, Hampton Street Columbia, SC, USA,
2258, Hampton Street  ,, Columbia, SC, USA

他们都应该是:

2258+haptom+street+columbia+sc+usa

标签: javascriptregex

解决方案


您可以使用

var rx = /^[,\s]+|[,\s]+$|([,\s]+)/g;
s = s.replace(rx, function(_,$1) { return $1 ? '+' : ''; })

模式匹配

  • ^[,\s]+- 字符串开头的 1+ 个逗号或空格字符
  • |- 或者
  • [,\s]+$- 字符串末尾有 1+ 个逗号或空格字符
  • |- 或者
  • ([,\s]+)- 1+ 逗号或空格字符被捕获到第 1 组

如果第 1 组与替换匹配+,则替换为空字符串(删除开始/结束处的空格/逗号)。

查看 JS 演示:

var strs = ['2258, Hampton Street, Columbia, SC, USA', '2258, Hampton Street, Columbia, SC,, USA, ', '2258, Hampton Street, Columbia, SC, USA ,', ' ,2258, Hampton Street, Columbia, SC, USA', ', 2258, Hampton Street, Columbia, SC, USA', '   2258, Hampton Street, Columbia, SC, USA', ',,2258, Hampton   Street, Columbia, SC, USA', '2258, Hampton Street,,,, Columbia, SC, USA ', '2258, Hampton Street Columbia, SC, USA,', '2258, Hampton Street  ,, Columbia, SC, USA'];
var rx = /^[,\s]+|[,\s]+$|([,\s]+)/g;
for (var s of strs) {
  console.log(s.replace(rx, function(_,$1) {
    return $1 ? '+' : '';
  }))
}


推荐阅读