RegEx для замены знаков препинания, исключая отрицательные числа - PullRequest
0 голосов
/ 03 июня 2019

В настоящее время, чтобы удалить пунктуацию из строки, я использую:


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 ]

2 голосов
/ 03 июня 2019

Если вы не хотите, чтобы знак минус или точка или запятая удалялись из цифр, одним из вариантов может быть захват того, что вы хотите сохранить (в данном случае цифра с необязательной десятичной частью) и сопоставление с тем, что вы хотитеудалить.

(-?\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 голосов
/ 03 июня 2019

Разделите ваш первый набор символов. Удалите дефис из первого набора и добавьте Отрицательный прогноз для дефиса:

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

И полное выражение:

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

Вот рабочий пример

0 голосов
/ 03 июня 2019

Я бы разделил его на две части. Сначала я удалил бы все, кроме буквенно-цифровых символов и -.

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

Не проверял, но должно работать

0 голосов
/ 03 июня 2019

что-то вроде /[,?!.']/g может выполнить эту работу, и вы добавите все, что хотите

const text = "bar........,foo,????!-1'poo!!!?'";

const res = text.replace(/[,?!.']/g, "")

console.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...