Для данных примера одним из вариантов может быть захват в группу ()
того, что вы хотите сохранить, и сопоставление со следующим ;
([^|\r\n]+\|[a-z]:\d+(?::"[^"\r\n]*(?:"(?!;)[^"\r\n]*)*")?);
(
Capture группа 1 [^|\r\n]+
Соответствует любому символу, кроме |
или новой строке \|[a-z]:\d+
Соответствует |
, символу az, :
и 1+ цифрам (?:
Группа без капиталовложений :"
Совпадение буквально [^"\r\n]*
Совпадение с любым символом, кроме "
или символом новой строки (?:
Не группа захвата "(?!;)[^"\r\n]*
Совпадение "
, если непосредственно не следует ;
, затем 0+ раз не "
)*
Закрыть без захвата группируйте и повторяйте 0+ раз (если между ними нет "
) "
Совпадение буквально
)?
Закройте группу без захвата и сделайте необязательно
);
Закрыть группу 1 и выполнить следующие действия ;
Regex demo
In для замены используется первая группа захвата
$1\n
* 1 067 *
const regex = /([^|\r\n]+\|[a-z]:\d+(?::"[^"\r\n]*(?:"(?!;)[^"\r\n]*)*")?);/g;
const str = `user_id|i:2;password|s:10:"asdfg;hjkl";username|s:16:"kamshory;mas"roy";`;
const subst = `$1\n`;
const result = str.replace(regex, subst);
console.log(result);
Другим вариантом может быть использование строк user_id
, password
и username
с соответствием i
или s
(user_id\|i:\d+|(?:password|username)\|s:\d+:".*?");
Regex demo
const regex = /(user_id\|i:\d+|(?:password|username)\|s:\d+:".*?");/g;
const str = `user_id|i:2;password|s:10:"asdfg;hjkl";username|s:16:"kamshory;mas"roy";`;
const subst = `$1\n`;
const result = str.replace(regex, subst);
console.log(result);