この問題がなぜ発生するのか知っていますが、解決する方法が必要です。Regexは入力文字列から消費していくつかの一致をスキップします
var str = "123+53ff+124+ks23+223+22+mo";
、私はこれを取得するnumber
と2つの+
兆候間の数字を置き換えたい:このよう/\+\d+\+/g
:
str = "123+53ff+number+ks23+number+number+mo";
をだから私はこの正規表現を使用して、私は、このような文字列を持って考えてみましょう
str = str.replace(/\+\d+\+/g, "+number+");
しかし、より多くの一致が(+3+4+5+...
)互いの後がある場合にどのようなそれがないことは、それがいずれかと一致している、次をスキップし、それは1と一致した場合、それは右の+
を消費するためだとそしてちょうどその+
次の要素の後にマッチングを開始:なぜこれが起こっている、私は一種の知っている...後に1をスキップし、後
を1と一致技術的には+
記号で囲まれていないため、一致しません。
は、入力が+3++4++5+
であれば、結果は、各番号は独自の+
記号で囲まれているため、予想通りである(1 +
が消費されている場合、次のいずれかを行いますbeacause 1を消費することはここでの問題ではありません)。
私はreplace
を2度呼び出すことでこの問題を解決しました。しかし、これは非常にハッキーです。私はしっかりとした方法が欲しい。だから、ここで正規表現を動作させる方法は?または、2つの連続番号を同じにするには+
記号を使用しますか?
注:私はこの特定の例の問題を解決したくありません(数字を+
の間に置き換えてください)。それは単に問題の例だった。
EDIT:
それを行う方法がある場合は、することができます私はグループ+
兆し?私はこれを行うことができます/(\+).../
私は$1
を使用してアクセスすることができますか?
詳細については、このリンクをお試しください:http://www.regular-expressions.info/lookaround.html –
JavaScriptには裏返しがありません。最初の '+'にマッチさせる必要があります。 – 4castle
@ 4castle:Ah derpはタグを見ませんでした。 – Amadan