正则表达式帮助。修改正则表达式以排除花括号中的内容

时间:2019-02-28 18:42:42

标签: regex regex-negation

在javascript中,我的正则表达式为:

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

我的字符串是:

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

在上面的示例中,正则表达式匹配"aaa""bbb""ccc"

我想更新我的正则表达式以排除花括号内的所有内容,使其仅匹配"bbb"

我该如何更新正则表达式?谢谢!

2 个答案:

答案 0 :(得分:3)

尝试(您的正则表达式用单独的字母也是如此)

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)

答案 1 :(得分:2)

如果要获取bbb,一种选择是使用dom,找到textnode并删除花括号之间的内容:

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 with a regex

如果您想从示例字符串中获取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);