Удалить текст до совпадения строки с помощью регулярных выражений - PullRequest
0 голосов
/ 16 апреля 2020

У меня проблема с использованием регулярных выражений для удаления всего до строки.

Заданная строка: xyz@gmail.com No TEST NOTE. If you are not an intended recipient

Ожидаемый результат: TEST NOTE. If you are not an intended recipient

Регулярное выражение, которое я использую для удаления предыдущей части: [^*] * No

Но это также удаляет часть ожидаемого результата и дает мне t an intended recipient в результате.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2020

^, чтобы начать с начала str. (.*?) будет соответствовать всему до No и не дальше. Вторая группа (.*) будет соответствовать всему после No. "$2" возвращает вторую группу.

const str = "xyz@gmail.com No TEST NOTE. If you are not an intended recipient"
const res = str.replace(/^(.*?)No (.*)/, "$2")
console.log(res)

const str2 = "xyz@gmail.com No Not available in the store. Ask the seller. Item is NORM"
const res2 = str2.replace(/^(.*?)No (.*)/, "$2")
console.log(res2)

Ваше регулярное выражение работает так, как работает, потому что

  1. [^*] означает все, кроме * ... и у вас нет * в вашей строке.
  2. вы используете жадный *, поэтому потребуется все, что может, до последнего вхождения no в строке.
  3. и вы, очевидно, используете флаг i, поэтому No в ваших регулярных выражениях соответствует No, NO и no.
0 голосов
/ 16 апреля 2020

Это будет точно соответствовать той части, которую вы хотите удалить:

^[^\s]+\sNo\s
0 голосов
/ 16 апреля 2020

Вы используете *, который является жадным. Попробуйте использовать *?, что лениво.

Я не совсем уверен, как ваше регулярное выражение удаляет все до t an intended recipient. Возможно, вы хотите, чтобы ваше регулярное выражение было

/^.*? No /i

. ^ может быть не тем, что вы хотите, если адрес электронной почты не обязательно находится в начале строки.

Кроме того, если Вы хотите удалить все до TEST NOTE, а не все до конца, включая No, вы можете попробовать

/^.*?(?=TEST NOTE)/i
...