regex help.изменить регулярное выражение, чтобы исключить содержимое в фигурных скобках - PullRequest
0 голосов
/ 28 февраля 2019

В javascript мое регулярное выражение:

let regEx = new RegExp("([A-Za-z])(?!([^<]+)?>)", "gi");

Моя строка:

<span class="customer-key">{aaa}</span>bbb {ccc}

В приведенном выше примере регулярное выражение соответствует "aaa", "bbb" и "ccc".

Я бы хотел обновить свое регулярное выражение, чтобы ИСКЛЮЧИТЬ все, что находится внутри фигурных скобок, чтобы оно совпадало ТОЛЬКО с "bbb".

Как я могу обновить регулярное выражение для этого?спасибо!

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Если вы хотите получить bbb, одним из вариантов может быть использование dom, поиск текстовых узлов и удаление содержимого между фигурными скобками:

const htmlString = `<span class="customer-key">{aaa}</span>bbb {ccc}`;
let div = document.createElement('div');
div.innerHTML = htmlString;
div.childNodes.forEach(x => {
  if (x.nodeType === Node.TEXT_NODE) {
    console.log(x.textContent.replace(/{[^}]+}/g, ''));
  }
});

Обратите внимание, что синтаксический анализ html с регулярным выражением не рекомендуется.

Если вы хотите получить bbb из вашего примера строкидругой вариант может соответствовать тому, что вы не хотите хранить, и заменить его пустой строкой.

const regex = /\s*<[^>]+>\s*|\s*{[^}]+}\s*/gm;
const str = `<span class="customer-key">{aaa}</span>bbb {ccc}`;
const result = str.replace(regex, '');
console.log(result);
0 голосов
/ 28 февраля 2019

Попробуйте (ваше регулярное выражение отдельных букв, так что мой тоже)

let regEx = new RegExp("([A-Za-z])(?!([^<]+)?>)(?!([^{]+)?})", "gi");
let str= '<span class="customer-key">{aaa}</span>bbb {ccc}'

let s =str.match(regEx);

console.log(s)
...