2017-06-08 5 views
0

私は1-10から得ることができる正規表現を取得しようとしていますし、私が試してみましたトラブルJavascriptの正規表現1-10

を抱えている:

/^[1-9]|10$/ //this will matches out 1-9 but not 10 
/^10|[1-9]$/ //this will matches 10 but no 1-9 digits 

私が見てきたので、私は変な感じ前のこの質問と人々は、これらの表現のどちらかがうまくいくと言いました。 1-10の番号を取得する別の方法のアイデアですか?

+0

入れ括弧が、前アンカー。このように、アンカーは両方の変更を適用します。今のように、^は10に適用され、[1-9]は$に適用されます。今のように、どちらも一致する必要がありますが、asdfasdfsdf'10'または '5'asdfasdfと一致する可能性があります – sln

答えて

1

数字が1〜10の文字列と一致する文字列と一致させたい場合は、/^[1-9]|10$/で終了したとします。ここでの問題は、この式は1-9 ) or 10 $ `(10で終わる任意の文字列)で始まる^[1-9](任意の文字列のいずれかと一致します。すなわち交代|は、^$文字が含まれていることである括弧がきちんとこの解決:。

/^([1-9]|10)$/ 
は、以下のアクションでそれを参照してください。

const regex = /^([1-9]|10)$/gm; // `gm` flags for demo only; read below 
 
const str = `1 
 
2 
 
3 
 
4 
 
foo 
 
5 
 
6 
 
7 
 
8 
 
9 
 
10`; 
 

 
let m; 
 
while (m = regex.exec(str)) { 
 
    console.log('Found match:', m[0]); 
 
}
.as-console-wrapper{min-height:100%}

T彼はスニペットでgmフラグを使用して、複数行にわたるすべての一致を検索します。 mは、^$を文字列の先頭と末尾ではなく、各行の先頭と末尾に一致させます。あなたのユースケースでは、おそらくいずれかのフラグを必要としません。

+0

ええと、これは戻ってきています... – SJR59

+0

何の入力?あなたのコンソールで '' 9'.match(/ ^([1-9] | 10)$ /) 'を試してみてください。それはうまく動作します。 –

0

具体的な使用例がわからない場合は、ここに^と&を含める理由はありません。数字は行の先頭と末尾に囲まれている必要があります。あなたの内部の正規表現が正しい場合であっても、「6歳の息子がいます」という「6」には一致しません。

代わりに、内側の正規表現を\ b(単語境界)で囲みます。だから、ヨルダンの例を使うために、\ b([1-9] | 10)\ bは1-10のすべての数字にマッチします。 JavaScriptで正規表現を使用するには、引数としてそれを受け入れるいくつかの機能の1つを利用する必要がある、またはそれに呼び出すことができるメソッド:交代を取り巻く

let regex = /\b([1-9]|10)\b/; 
 

 
console.log('I have a 6 year old son.'.match(regex)[0]); 
 
console.log('I have a six year old son.'.match(regex)); 
 

 
console.log('I have a 6 year old son.'.replace(regex, 'six')); 
 

 
console.log(regex.test('I have a 6 year old son.')); 
 
console.log(regex.test('I have a six year old son.'));