2016-04-07 12 views
0

正規表現を使用するのは難しいです。私はregex101.comで多くのテストを行ってきたが、これを解決することができませんでした。..既知の文字列の正規表現+混合varchar +既知の文字列

を、私は、この文字列を持っている:setVersion('2.0.2.4999');

そして、私はバージョン番号を交換できるようにしたい、常に4つの数字で構成されていますドットは区切られていますが、それぞれ1桁以上である場合があります。

私はこれをgulpタスクに挿入する必要があるため、これを(できれば)1行で解決することをお勧めします。

/setVersion\('([0-9].[0-9].[0-9].[0-9])/ 

をが、各番号は私の場合ではないだけで1桁を、持っている場合にのみ動作します:

私はこれを試してみました。

数字の検索を複数回行うようにするにはどうすればよいですか?

+0

'[0-9] +' 1桁以上の数字をキャッチします。そして、ドットを '\ .'としてエスケープする必要があります。そうでなければ、任意の文字を意味します。 – CBroe

+1

カンマはどこですか?_4数値カンマ区切り – putvande

+0

ドット区切り、翻訳で失われた – ghego1

答えて

2

上記の文字のうちの1つ以上と一致させるには、+限定子を使用できます。正規表現にはエスケープする必要がある末尾の')がありません。

/setVersion\('([0-9]+(?:\.[0-9]+){3})'\)/ 

Live Demo

+0

最後に '' 'がないと思いますか?あなたがそれを置き換えることを望んでいない限り。 – putvande

+0

@putvande右に '' 'が追加され、') 'がありません。ありがとう:) – Tushar

2

これは、あなたが[0-9]\dを置き換えることができ

\d+\.\d+\.\d+\.\d+ 

を動作するはずです。ドット(.)はregexの任意の文字を表しているため、エスケープされます。

より正確な答えは

\d+(?:\.\d+){3} 

正規表現の内訳

\d+ #Match one or more digits 
(?: #Non-capturing group 
    \. #Match . literally 
    \d+ #Match one or more digits 
) 
{3} #Repeat whatever was previously in() three times 

になります最終的な正規表現は

setVersion\('(\d+(?:\.\d+){3})'\) 

または

のように見えます
+0

理由を説明してください(彼のために、私はドットがエスケープされていないことを見てください) – llamerr

+0

@llamerrは説明を追加しました – rock321987

+0

コメントを投稿してください。 – rock321987

1

1と無制限の数の間で一致します "+" 数量詞を、使用してください。また、 "。"をエスケープする必要があります。そうしないと、任意の文字と一致するためです。

これを試してみてください:

setVersion\('([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)

Regex Demo