Как сопоставить текст между специальными символами в различных сценариях

1

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

Примеры:

Бесполезная информация || основная информация || расширенная информация || супер информация || нет информации

Должно соответствовать: основная информация и расширенная информация и супер информация

Бесполезная информация || основная информация || расширенная информация || нет информации

Должно соответствовать: основная информация и расширенная информация

Бесполезная информация || основная информация || нет информации

Должно соответствовать: основная информация

Бесполезная информация || нет информации

В случае совпадения: без информации

Я пытался:

||[^||]*||[^||]*

и этот:

([^||]*)(?=||)

но не работает так, как ожидалось, во всех сценариях. Можно ли это сделать только с одним regex выражения?

  • 1
    Может быть что-то вроде ^((?:(?!\|{2}).)*)\|{2}(?!.*\|{2})|\|{2}\s*(.*?)(?=\s*\|{2}) , см. демонстрацию .
  • 0
    Да, это работает. Если ты напишешь это как ответ, я приму это.
Показать ещё 2 комментария
Теги:

1 ответ

3

Вы можете сделать это без регулярного выражения и разделить на ||

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);
});
  • 1
    Спасибо за ответ, тоже работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню