当前,要从字符串中删除标点符号,我使用:
export function scrubPunctuation(text) {
let reg = /\b[-.,()&$#![\]{}"']+\B|\B[-.,()&$#![\]{}"']+\b/g;
return text.replace(reg, "");
}
但是这也会删除-1
,其中-
并不是作为数字值一部分的“标点符号”。
如何解决此问题?
用例示例:
我从一个用户那里得到了一个看起来像这样的字符串:
const userStr = " I want something, sort of, that has at least one property < -1.02 ? "
当前,我的方法是首先trim
字符串以删除前导/尾随空白。
然后我从字符串中“擦洗”标点符号。
从上面的userStr
的示例中,我可能最终会解析出来(通过一些与正则表达式无关的内容):
const relevant = ["something", "at least one", "<", "-1.02"]
通常,非数字标点是不相关的。
答案 0 :(得分:2)
拆分第一个字符集。从第一组中删除连字符,并为连字符添加Negative lookahead:
[-]+(?![0-9]) \\a Hyphen not followed by a number
完整表达式:
\b[-]+(?![0-9])|[-.,()&$#![\]{}"']+\B|\B[.,()&$#![\]{}"']+\b
答案 1 :(得分:2)
如果您不希望将减号或点或逗号从数字中删除,则一个选项可能是捕获要保留的内容(在这种情况下为带有可选小数部分的数字)并匹配您想要的内容删除。
(-?\d+(?:[.,]\d+)*)|[-.,()&$#![\]{}"']+
let pattern = /(-?\d+(?:[.,]\d+)*)|[-.,()&$#![\]{}"']+/g;
let str = "This is -4, -55 or -4,00.00 (test) 5,00";
let res = str.replace(pattern, "$1");
console.log(res);
答案 2 :(得分:0)
类似/[,?!.']/g
的东西可以完成工作,然后添加所需的内容
const text = "bar........,foo,????!-1'poo!!!?'";
const res = text.replace(/[,?!.']/g, "")
console.log(res)
答案 3 :(得分:-1)
我将其分为两部分。 首先,我将删除除字母数字和-以外的所有内容。
/[^a-z0-9\-\s\n]/gi
它比您的方法更具可读性,并且应该给出相同的结果,除非要保留某些字符(例如空格\ s和换行符\ n)。 为了摆脱标点符号“-”,我将使用:
/-(\d*)/g
一共:
export function scrubPunctuation(text) {
let reg = /[^a-z0-9\-\s\n]/gi;
let reg2 = /-(\d*)/g;
text = text.replace(reg, "");
return text.replace(reg2, "$1");
}
还没有测试过,但是应该可以工作