在javascript中,我的正则表达式为:
let regEx = new RegExp("([A-Za-z])(?!([^<]+)?>)", "gi");
我的字符串是:
<span class="customer-key">{aaa}</span>bbb {ccc}
在上面的示例中,正则表达式匹配"aaa"
,"bbb"
和"ccc"
。
我想更新我的正则表达式以排除花括号内的所有内容,使其仅匹配"bbb"
。
我该如何更新正则表达式?谢谢!
答案 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);