2017-02-25 9 views
-1

は、この例を見てみましょう:私の(クローム)コンソールに上記の行javascriptのmatch()regex関数は何を返すべきですか?

"12345".match(/(?=(\d{4}))/g); 

の貼り付けは、私のために["", ""]を返しているが、私は["1234", "2345"]の配列を抽出しようとしています。 This MDN articleは、実際には、一致の配列を期待する必要があることを示しているようです。

この正確な文字列の特定の正規表現は、確かに昨日からthis questionで証明された一致を返します。

この機能に関する誤った仮定をしている、または誤って使用している場合は、期待される動作がどのようなものであるべきか、私がここで取ることができる代替方法を明確にしてください。

+3

(1) "234"が両方の希望の一致に含まれているので、複数の一致でソース文字列内の同じ文字を一致させることはできません。 (2)先読みは先読みしている文字をキャプチャしていないので、空の文字列を取得するのはこのためです。 – trincot

+0

あなたは答えから正規表現を盗むことはできませんが、正規表現を使用するコードは無視してください。 Chromeは、コードに期待される出力を生成します。あなたがリンクした答えに含まれているコードを使用すると、結果が得られます。 –

+0

@Rawing - コメントの中で私が言ったように、コードは無限ループに陥ってしまった。私は今日後でそれを再訪するつもりですが、 'match()'はもっと短くて読みやすいように私にもっとアピールしました。 – DaveHolt

答えて

0

編集:上記のtrincotで説明されているように、正規表現はジョブの正しいツールではないようです。

自分で交換しようとすると、ここでは配列とsliceを含む楽しい解決策があります。リテラル4は、同様の効果を達成するために、他の任意の数字と置き換えることができます。

console.log(
 
    '12345'.split('').map((_, i, a) => a.slice(i, i + 4).join('')).slice(0, 1 - 4) 
 
)

+3

これは、2つではなく1つの一致を生成します。 –

0

あなたは質問Match all consecutive numbers of length nを引用しました。受け入れられた答え(https://stackoverflow.com/a/42443329/4875869)からコードを取得してみませんか? "12345".match(/(?=(\d{4}))/g);と間違って行く何

["", ""]に最初""$0 (the whole match) = "", $1 (group 1) = "1234"との一致に対応し、その第二""用(配列理由g[$0 (match 1), $0 (match 2)]のようである)ということです。

g"12345".match(/(?=(\d{4}))/);)を省略すると、["", "1234"][$0 (the match), $1 (the match)])になります。

関連する問題