2017-02-17 29 views
2

私持って次の文字列一致文字列

FOO:21、バー:11 fooとbarが定数ではありませんので、私はすべて一致しようとしている

最後の後の数字":"(コロン)文字です。

const myString = 'foo: 21, bar: 11' 
myString.match(/\d+/g).shift().join() -> 11 

純粋な正規表現で同じことをすることはできますか?

ありがとうございました!

/\d+(?![^:]*:)/g 

RegEx Demo

(?![^:]*:)は、我々が先に数字のない:ではないがあることを主張する否定先読みです:あなたは、この正規表現を使用することができ、負の正規表現を使用して

+0

。 – Tushar

+0

時には文字列は単に "bar:11"なので、[1]を使用しないようにしたいのですが、 – Anderson

答えて

2

マッチング。

コードデモ:

var myString = 'foo: 21, bar: 11'; 
 
console.log(myString.match(/\d+(?![^:]*:)/g));

+0

この解決策は、最後の ':'の後ろにある複数桁のチャンクを抽出するので、私のアプローチとは異なります - [このデモ](https:// regex101 .com/r/xFNZ0z/1)。また、 ':'([demo](https://regex101.com/r/xFNZ0z/2))がなければ、数字を取得します。それがOPにとって重要であるかどうかは分かりません。 –

1

var myString = 'foo: 21, bar: 11'; 
 
console.log(myString.replace(/(.)*\:\s?/,''));

+1

これは何をしますか?最新のものをすべて交換してください:? – Anderson

+0

はい。 (*)はすべてを意味します。 \: - >最後の列\ s?スペースがあれば削除されます。そうでなければ何もしない。 –

+1

定量化されたグループは何ですか、なぜなら '。*' –

1

次の2つのソリューションのいずれかを使用することがあります。

この1つは最後の:に一致し、0の後の数字をつかむだろう+空白:

var s = "foo: 21, bar: 11"; 
 
var m = s.match(/.*:\s*(\d+)/); 
 
if (m !== null) { 
 
    console.log(m[1]); 
 
}

そして、この1は、グループ1に1+数字をキャプチャし、その後0+文字列の最後まで:以外の文字にマッチします、:は0+空白に続くでしょう。 (:\ S *(\ D +)$//)[1] ``あなたがstr.match使用することができます

var s = "foo: 21, bar: 11"; 
 
m1 = s.match(/:\s*(\d+)[^:]*$/); 
 
if (m1 !== null) { 
 
    console.log(m1[1]); 
 
}

+0

文字列には常に少なくとも1つの ':'が含まれていると仮定し、その後にキャプチャする数字のチャンクは1つしかないことに注意してください。 –