javascript - 正则表达式删除用加号替换所有空格和逗号
问题描述
我有这样的查询
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
解决方案
您可以使用
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 ? '+' : '';
}))
}
推荐阅读
- sql - 如何复制具有条件的行
- python - 向查询集添加日期范围列
- css - CSS 网格行高
- laravel - 我的模态引导程序存在但不可见
- javascript - 调用带参数的函数的reactJS渲染无法编译
- python - 检查索引中的任何缺失日期
- google-bigquery - Apache Beam/Google Dataflow PubSub 到 BigQuery 管道:处理插入错误和意外重试行为
- laravel - Laravel 更改存储控制器功能的参数
- spring-boot - Spring Boot 数据源未创建 JNDI
- java - 执行主类时如何使bash自动完成java限定类名