regex - 正则表达式:擦洗标点符号,除非在单词中?
问题描述
我不擅长正则表达式,但我有这个可以从字符串中删除标点符号。
let text = 'a user provided string'
let pattern = /(-?\d+(?:[.,]\d+)*)|[-.,()&$#![\]{}"']+/g;
text.replace(pattern, "$1");
我正在寻找一种方法来修改它,以便在单词中保持标点符号,例如
- 一些夸张的词
- a_snake_case
- 或.even.a.dot.word
都应该保留标点符号。我将如何修改它?
解决方案
一种选择可能是将 更改\d
为\w
以将匹配扩展到单词字符并将连字符添加到捕获组中的字符类。
在替换使用组 1 中。
(\w+(?:[.,-]\w+)*)|[-.,()&$#![\]{}"']+
如果你想匹配多个连字符、逗号或点,你可以重复字符类[.,-]+
推荐阅读
- mysql - COUNT 和 SELECT 到 mySQL 中的同一查询中
- c# - WCF - 无法发送数据
- ember.js - Ember-cli 插件开发,如何区分插件开发和应用程序开发
- android - 如何从 EAN 13 UPC 条码 android 获取重量和价格
- macos - Cocoa 进度条的最小高度是多少?
- protocol-buffers - 是否允许取消弃用 protobuf 字段?
- postgresql - postgresql 客户端 - 在 php:5-apache 上安装
- ios - 在扩展中声明属性并获得错误的访问错误
- hover - CSS:悬停问题显示元素和背景图像
- python - Pandas:从具有混合字符串浮点值的列中去除空格