2011-07-29 21 views
7

JavaScript正規表現を使用して、文字列の最初のテキスト文字の前にある空白文字の数を数えることはできますか?私は0,1,2 +があるかどうかだけ気にします。空白文字を数えるjavascript正規表現

私の現在の解決策は、3つの正規表現を使用して0,1,2 +カテゴリ(それぞれに別々のパターン)を決めるだけですが、より洗練されたソリューションを探しています。

正規表現でパターンを数えることは可能ですか?私は、非欲張りグループ化を使用してこの正規表現は、文字列の先頭に0と2の間の空白文字と一致し

+0

2+は2つ以上を意味しますか?各種類の文字列の数をカウントするのはあなたの意図ですか? –

答えて

6
"  a".match(/^\s{0,2}/)[0].length 

....私は推測する長さを数えることができます。これは、仕事をする必要があります

+1

どうして 'theString.match(/^\ s + /)[0] .length' - OPが意味するのは、2 +以上のことを意味すると思います。 –

+0

@Ray:3つのカテゴリしかないようです。 – SLaks

+0

が正しく、3つのカテゴリ:0,1、または2+のみ。私はまた、Javaトリムのような先導的な空白の後にすべてを取得する必要があります。 – hvgotcodes

4

あなただけ行うことができます。

" aaa".replace(/^(\s*).*$/,"$1").length 
+1

最初のスペースがゼロの場合は動作しないようです - 単語全体の長さを返します。 – jfriend00

+0

ありがとう、私は+を*に変更しました。 – Enki

2

私は現実の生活の中で正規表現を使用したいかわかりませんこの仕事では、キャプチャでそれらを一致させることができ、その長さを見ることができます:

function countLeadingSpaces(str) { 
    return(str.match(/^(\s*)/)[1].length; 
} 

スピードのために設計された非正規表現の仕方(ほとんど何が速い正規表現と比較される):

function countLeadingSpaces2(str) { 
    for (var i = 0; i < str.length; i++) { 
     if (str[i] != " " && str[i] != "\t") { 
      return(i); 
     } 
    } 
    return(str.length); 
} 
+1

なぜ '\ s *'を使用せず、「マッチ」チェックを一掃してみませんか? – paxdiablo

+0

'/ ^(\ s *)[^ \ t] /'空文字列の場合はnullを返します。何らかのチェックなしで直接 '[1] .length'を参照解除することはできません。私は私の方法が最もコンパクトであることを示唆しているわけではありませんが、私はすべての端の場合に安全であるように努めていました。 – jfriend00

+1

aah、私は理解していますが、 '[\ t]'ビットが見つからないのでヌルを返すと思います。とにかく正規表現は貪欲であるので、 '^(\ s *)'を単独で使うことができます。 – paxdiablo

0

はないだけでキャプチャグループを使用し、長さをチェックする理由:

<html> 
    <head> 
    </head> 
    <body> 
     <script language="javascript"> 
      var myStr = " hello"; 
      var myRe = /^(\s*)(.*)$/; 
      var match = myRe.exec(myStr); 
      alert(match[1].length); // gives 2 
      alert(match[2]);   // gives "hello" 
     </script> 
    </body> 
</html 

これに続いて、3つのケース、長さが0,1、またはそれ以外の場合に動作し、残りの文字列に作用するコードが続きます。

正規表現はツールのように扱わなければなりません。ツールボックス全体ではありません。

1

文字列内の最初の空白以外の文字のインデックス は、先頭の空白文字の数と同じです。

t.search(/\S/); 

あなたは非空白文字がある場合は、Math.min(t.search(/\S/), 2);

0、1または2への復帰を制限することができます主張する場合のリターンは-1になります....

関連する問題