正则表达式,用于替换标点符号(不包括负数)

时间:2019-06-03 14:42:58

标签: javascript regex string

当前,要从字符串中删除标点符号,我使用:


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"]

通常,非数字标点是不相关的。

4 个答案:

答案 0 :(得分:2)

拆分第一个字符集。从第一组中删除连字符,并为连字符添加Negative lookahead

[-]+(?![0-9]) \\a Hyphen not followed by a number

完整表达式:

\b[-]+(?![0-9])|[-.,()&$#![\]{}"']+\B|\B[.,()&$#![\]{}"']+\b

这里是working example

答案 1 :(得分:2)

如果您不希望将减号或点或逗号从数字中删除,则一个选项可能是捕获要保留的内容(在这种情况下为带有可选小数部分的数字)并匹配您想要的内容删除。

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

Regex demo

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");
}

还没有测试过,但是应该可以工作