首页 > 解决方案 > 正则表达式:擦洗标点符号,除非在单词中?

问题描述

我不擅长正则表达式,但我有这个可以从字符串中删除标点符号。

let text = 'a user provided string'
let pattern = /(-?\d+(?:[.,]\d+)*)|[-.,()&$#![\]{}"']+/g;
text.replace(pattern, "$1");

我正在寻找一种方法来修改它,以便在单词中保持标点符号,例如

都应该保留标点符号。我将如何修改它?

标签: regex

解决方案


一种选择可能是将 更改\d\w以将匹配扩展到单词字符并将连字符添加到捕获组中的字符类。

在替换使用组 1 中。

(\w+(?:[.,-]\w+)*)|[-.,()&$#![\]{}"']+

正则表达式演示

如果你想匹配多个连字符、逗号或点,你可以重复字符类[.,-]+


推荐阅读