我有一个字符串
{'lalala'} text before \{'lalala'\} {'lalala'} text after
我想获得开括号{
,但前提是没有转义字符\
。
有点/(?:[^\\])\{/
但它在第一次发言时不起作用。
答案 0 :(得分:2)
典型的方法是匹配前面的非\
字符(或字符串的开头),然后将其放回替换逻辑中。
const input = String.raw`{'lalala'} text before \{'lalala'\} {'lalala'} text after`;
function replace(str) {
return input.replace(/(^|[^\\])\{'(\w+)'\}/g,
(_, chr, word) => chr + word.toUpperCase());
}
console.log(replace(input));

答案 1 :(得分:1)
^
进来的地方:它将一段正则表达式锚定到字符串的开头(或m
多行模式中的行)。因为'有效'开括号位于字符串的开头或非\
字符之后,我们可以使用以下正则表达式:
/(?:^|[^\\])\{/g
我添加了g
全局标记,因为我们希望匹配所有有效的'打开括号。使用示例:
console.log("{'lalala'} text before \\{'lalala'\\} {'lalala'} text after".match(/(?:^|[^\\])\{/g))

如果要在替换中使用正则表达式,您可能希望在括号前捕获该字符,因为它也会被替换。