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、これがグローバル検索であることを示しています。最初の文字列だけでなく、引用符で囲まれたすべての文字列が必要です。
    • "照合する文字列の前後の引用符を表します
    • .任意の文字を意味します
    • +?正規表現の次の文字までのすべてを意味するイディオムです。言い換えれば、貪欲でない一致です。*ここで の代わりに使用する+?と、最初の と最後の の間に大きな引用符で囲まれた文字列が 1 つだけ見つかり"、他のすべての がその"中に含まれます!
    • 次に、match 関数に実際に返してもらいたいものを括弧で囲みます。この場合は、引用符を外して、引用符内のすべてです。
  • 2 番目の正規表現は文字数を/{/gカウントします{。を使用することで、ブレース文字が見つからない場合でも||[]の戻り値を確実に取得できます。0
  • ループする必要なくこれらを合計する最も簡単な方法は、 を使用することです。reduceこれには の初期値が与えられます0
于 2013-01-25T20:42:06.107 に答える