2

たとえば、単純な正規表現を使用して、最初のスペースより前のすべてを一致させています。

var str = '14:00:00 GMT';
str.match(/(.*?)\s/)[0]; //Returns '14:00:00 ' note the space at the end

これを避けるために、私はこれを行うことができます:

str.match(/(.*?)\s/)[0].replace(' ', '');

しかし、より良い方法はありますか?正規表現にスペースを含めないようにすることはできますか? もう 1 つの例は、2 文字の間の何かを見つけることです。上記の文字列の真ん中にある 00 を見つけたいとします。

str.match(/:(.*?):/)[0]; //Returns :00: but I want 00
str.match(/:(.*?):/)[0].replace(':', ''); //Fixes it, but again...is there a better way?
4

5 に答える 5

2

肯定的な先読みアサーションは、次のように使用できます。

(.*?)(?=\s)

これは、空白の前にあるすべてのものに一致しますが、空白自体には一致しません。

于 2012-09-27T05:12:29.303 に答える
2

次のようにインデックスを 0 から 1 に変更するだけでよいと思います。

   str.match(/(.*?)\s/)[1]

0 は一致した文字列全体を意味し、1 は最初のグループを意味します。これはまさにあなたが望むものです。

@codaddic は別の解決策を提供します。

str.match(/(.*?)(?=\s)/)[0]

(?=\s) は、先読みを意味しますが、空白を消費しないため、一致した文字列全体は '14:00:00' になりますが、空白はありません。

于 2012-09-27T05:26:37.120 に答える
1

はい、文字クラスを使用できます:

var str = '14:00:00 GMT';
str.match(/[^\s]*/)[0]; //matches everything except whitespace
于 2012-09-27T05:11:58.497 に答える
0

あなたのコードは答えに非常に近いです。[0] を [1] に置き換えるだけです。str.match(/:(.*?):/) が実行されると、オブジェクトが返されます。この例では、オブジェクトの長さは 2 で、次のようになります。

[":00:","00"]

インデックス 0 には式に一致する文字列全体が格納され、インデックス 1 以降には式に一致する結果が各括弧内に格納されます。
別の例を見てみましょう:

 var str = ":123abcABC:";
 var result = str.match(/:(\d{3})([a-z]{3})([A-Z]{3}):/);
 console.log(result[0]);
 console.log(result[1]);
 console.log(result[2]);
 console.log(result[3]);

そして結果:

:123abcABC: 
123 
abc 
ABC

お役に立てば幸いです。

于 2012-09-27T05:40:11.817 に答える
0

これを試して、

.*(?=(\sGMT))

RegexBuddy スクリーンショット

ここに画像の説明を入力

于 2012-09-27T05:41:38.650 に答える