Из вашего примера кажется, что у вас буквально есть backsla sh, за которым следует n
и backsla sh, за которым следует r
(в отличие от новой строки или возврата каретки), что означает, что вы можете 'не использовать только инвертированный символьный класс (поскольку вам нужно обрабатывать последовательность из двух символов). Я бы использовал положительный взгляд вперед, чтобы знать, где остановиться, поэтому я могу использовать чередование для этой части.
Вы не сказали, какие части этих строк должны совпадать, поэтому мне пришлось угадать немного, но вот мое лучшее предположение (с полезным вводом от Niet the Dark Absol ):
const rex = /\\\\.*?(?=[ &<\r\n]|\\[rn](?:$| ))/gmi;
Это говорит:
- Соответствие начинается с
\\
- Взять все, что было до опережения (не жадно)
- Опережающая: чередование:
- пробел,
&
, <
, возврат каретки ( \r
, символ 13) или новую строку (\n
, символ 10); или - Backsla sh, за которым следует
r
или n
, если либо в конце строки, либо после пробела (поэтому мы получить \nancy
, но не \n
после него).
Обновленное регулярное выражение x101
Возможно, вы захотите получить больше символов, чем просто пробел после \r
/ \n
. Если да, сделайте его символьным классом (и / или используйте \s
для «пробела», если это применимо):
const rex = /\\\\.*?(?=[ &<\r\n]|\\[rn](?:$|[ others]))/gmi;
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^