使用Javascript匹配引号之间的字符数?

时间:2013-01-25 20:28:29

标签: javascript

假设我的数据如下

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

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

2 个答案:

答案 0 :(得分:6)

var nb = str.split('"').filter(function(_,i){return i%2}).join('')
     .split('{').length - 1;

答案 1 :(得分:0)

s是你的字符串

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

由于有些人发现正则表达式令人生畏,我认为这可能有助于逐步了解其工作原理。 :)

  • 第一个正则表达式/"(.+?)"/g为您提供原始字符串中所有引用字符串的数组。
    • 起始和结束//是正则表达式,因为引号是字符串。 g表明这是一个全局搜索 - 我们想要所有引用的字符串,而不仅仅是第一个字符串。
    • "表示要匹配的字符串
    • 之前和之后的引号
    • .表示任何字符
    • +?是一个成语,表示正则表达式中下一个字符的所有内容;换句话说,非贪婪的匹配。如果我们在这里使用*而不是+?,我们会在第一个和最后一个"之间找到一个大引号字符串,其中包含所有其他"
    • 然后我们在括号中输入我们希望匹配函数实际返回给我们的内容。在这种情况下,它是引号内的所有内容,留下引号。
  • 第二个正则表达式/{/g计算您的{个字符。通过使用||[],我们确保即使找不到大括号字符也会得到0的返回值。
  • 在不需要循环的情况下对这些进行求和的最简单方法是使用reduce,我们提供初始值0
相关问题