如果之前没有其他人,如何找到char

时间:2017-04-02 09:05:17

标签: javascript regex

我有一个字符串

{'lalala'} text before \{'lalala'\} {'lalala'} text after

我想获得开括号{,但前提是没有转义字符\

有点/(?:[^\\])\{/但它在第一次发言时不起作用。

2 个答案:

答案 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))




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