1

整数、分数、および浮動小数点数を検出するために使用するカスタム正規表現があります。

var regEx = new RegExp("^((^[1-9]|(0\.)|(\.))([0-9]+)?((\s|\.)[0-9]+(/[0-9])?)?)$");
var quantity = 'd';
var matched = quantity.match(regEx);
alert(matched);

(コードはhttp://jsfiddle.net/aNb3L/にもあります。)

問題は、1 つの文字に一致することであり、その理由がわかりません。しかし、それ以上の文字では失敗します (これは良いことです)。

免責事項: 正規表現は初めてですが、 http: //gskinner.com/RegExr/では 1 文字と一致しません。

4

2 に答える 2

5

ストレート正規表現構文を使用する方が簡単です。

var regEx = /^((^[1-9]|(0\.)|(\.))([0-9]+)?((\s|\.)[0-9]+(\/[0-9])?)?)$/;

コンストラクターを使用するときはRegExp、円記号を2倍にする必要があります。現状では、コードには円記号が1つしかないため、\.部分式は次のように扱われます。これが、.数字以外の1文字がすり抜ける方法です。

したがって、あなたもこのように機能します:

var regEx = new RegExp("^((^[1-9]|(0\\.)|(\\.))([0-9]+)?((\\s|\\.)[0-9]+(/[0-9])?)?)$");

これは、文字列構文でも引用符のメカニズムとしてバックスラッシュが使用されているために発生します。正規表現が最初に文字列定数として解析されるとき、それらを2倍にしないと、これらのバックスラッシュは削除されます。次に、文字列が正規表現パーサーに渡されると、それらはなくなります。

コンストラクターを実際に使用する必要があるのRegExpは、正規表現を動的に構築する場合、またはJSONなどを介してコードに配信される場合のみです。

于 2012-10-03T17:53:34.883 に答える
1

まあ、整数の場合、これはあなたの正規表現になります:

/^(0|[1-9]\d*)$/

次に、フロートの可能性を考慮する必要があります。

/^(0|[1-9]\d*)(.\d+)?$/

次に、分数の可能性を考慮する必要があります。

/^(0|[1-9]\d*)((.\d+)|(\/[1-9]\d*)?$/

私にとって、この正規表現は元の正規表現よりもはるかに読みやすいですが、もちろんあなた次第です。

于 2012-10-03T17:59:22.243 に答える