У меня есть строки в разных сценариях. Идея состоит в том, чтобы взять текст в середине предложения между ||
, Если есть только один ||
, займет первую часть.
Примеры:
Бесполезная информация || основная информация || расширенная информация || супер информация || нет информации
Должно соответствовать: основная информация и расширенная информация и супер информация
Бесполезная информация || основная информация || расширенная информация || нет информации
Должно соответствовать: основная информация и расширенная информация
Бесполезная информация || основная информация || нет информации
Должно соответствовать: основная информация
Бесполезная информация || нет информации
В случае совпадения: без информации
Я пытался:
||[^||]*||[^||]*
и этот:
([^||]*)(?=||)
но не работает так, как ожидалось, во всех сценариях. Можно ли это сделать только с одним regex
выражения?
Вы можете сделать это без регулярного выражения и разделить на ||
const strings = [
"Useless information|| basic information|| advanced information|| super information|| no information",
"Useless information|| basic information|| advanced information|| no information",
"Useless information|| basic information|| no information",
"Useless information|| no information"
];
strings.forEach((s) => {
let parts = s.split("||");
let result = [];
if (parts.length === 2) {
result.push(parts[0]);
}
if (parts.length === 3) {
result.push(parts[1]);
}
if (parts.length > 3) {
parts.shift();
parts.pop();
result = parts;
}
console.log(result);
});
^((?:(?!\|{2}).)*)\|{2}(?!.*\|{2})|\|{2}\s*(.*?)(?=\s*\|{2})
, см. демонстрацию .