3

假设我的数据如下

Hello { "I have {g{t{" braces { between "{" { quotes{  "{{"

如何匹配仅在引号之间的 { 符号?我试图仅在引号之间提取指定字符的出现次数。有任何想法吗?样本应匹配 6 个大括号

4

2 回答 2

6
var nb = str.split('"').filter(function(_,i){return i%2}).join('')
     .split('{').length - 1;
于 2013-01-25T20:30:49.057 回答
0

s你的字符串在哪里

s.match(/"(.+?)"/g).reduce(function(p,c) {return p + (c.match(/{/g)||[]).length;}, 0);

由于有些人觉得正则表达式很吓人,我认为逐步了解它的工作原理可能会有所帮助。:)

  • 第一个正则表达式/"(.+?)"/g为您提供原始字符串中所有带引号的字符串的数组。
    • 正则表达式的开头和结尾/and/就像引号是字符串一样。表明g这是一个全局搜索——我们想要所有引用的字符串,而不仅仅是第一个。
    • "表示要匹配的字符串前后的引号
    • .表示任何字符
    • +?是一个成语,表示正则表达式中直到下一个字符的所有内容;换句话说,非贪婪匹配。如果我们*在这里使用而不是在+?first 和 last 之间只找到一个大引号字符串",并且所有其他"s 都包含在其中!
    • 然后我们将我们希望匹配函数实际返回给我们的内容放在括号中。在这种情况下,它是引号内的所有内容,而引号除外。
  • 第二个正则表达式/{/g计算你的{字符。通过使用||[],我们确保0即使没有找到大括号字符,我们也会获得返回值。
  • 在不需要循环的情况下对这些求和的最简单方法是使用reduce,我们提供 的初始值0
于 2013-01-25T20:42:06.107 回答