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

regex help. modify regex to exclude content within curly braces

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

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

我的字符串是:

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

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

我想更新我的正则表达式以排除大括号内的任何内容,以便它只匹配 "bbb"

我该如何更新正则表达式才能做到这一点?谢谢!

尝试(你的正则表达式分隔字母所以我也是)

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)

如果你想获得 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 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);