2016-07-20 11 views
3

正規表現に問題があります。正規表現が文字列の終わりを見つけます

私は変更することができますmyData=xxxx& XXXXのすべてocurrencesを交換したいが、それはmyData=xxxあるときは常に、最後ocurrence除き、&で終わります。

var data = "the text myData=data1& and &myData=otherData& and end myData=endofstring" 
data.replace(/myData=.*?&/g,'newData'); 

それが返されます。

テキストあるnewDataと&あるnewDataと終了MYDATA =正しいのですが、どのように私は最後のものを検出することができます

をendofstring?

答えて

5

2つのこと:

  1. あなたはあなたがに交代|)を使用することができますあなたの質問のコードで

  2. をやっていないこれは、どこかreplaceの結果を割り当てる必要があります&または文字列の末尾に一致します。

そう:

var data = "the text myData=data1& and &myData=otherData& and end myData=endofstring" 
 
    data = data.replace(/myData=.*?(?:&|$)/g,'newData'); 
 
// ^^^^^^^-- 1     ^^^^^^^-- 2 
 
console.log(data);

注非捕捉基((?:...))の使用は、交互の範囲を制限します。

何について
+0

使用する正しいだろう代わりに[&$ \。](:&| $?)? – Poyke

+0

@ MC93:なぜそれを言うのですか?文字列の最後でなくても最後の文字列に置き換わります。文字列の最後に '&'が付いていれば(これはかなり必要です)。 –

+0

@Poyke:いいえ、 '[&$]'は*文字*と&$と '$ 'を探します。 –

関連する問題