2016-11-29 8 views
1

内の文字を置き換えるために、私は2つのテストの文字列を持っています。正規表現の引用符

私はこれを試してみました:

(".*):(.*") 

はに置き換え:

$1Q$2 

が、私はこれで終わる:

1+"Q"+2:xyz 
1+"Q"+2:xyz 

が、私はこれで終わるしたい:

1+"Q"+2:xyz 
1+"aQfb"+2:xyz 

誰かが私を助けてください。 Javascriptで動作する必要があります。

編集:私は正常に動作するもの(つまりブラウザで直接JavaScriptでそれをやって)に私のテストツールを切り替えた

これが機能するようになりました:

var str = '1+"a:fb"+2:xyz'; 
var res = str.replace(/(".*):(.*")/g, "$1Q$2"); 

しかし、私は2がある場合:引用符の二組では、そのよう:

1+"a:fb"+2+"Q":xyz 
+0

あなたの正規表現では、これらすべてのバックスラッシュは何ですか?ブードゥーは逃げ出しません。エスケープされなければならないものと、それらのものだけをエスケープします。 – Tomalak

+0

私はいつも引用符をエスケープしました - 私はそうする必要はありません - それを今変更しました – Graham

+2

あなたのアプローチは期待どおりに機能しませんか? https://regex101.com/r/sogO6I/1 – Danilo

答えて

4

1+"a:fb"+2+":" 

私は今、この結果を得ます

効果的に、3つの部分で構成されるパターンを置き換えようとしています:

  1. ":
  2. :
  3. ":も含まないので、式は次のようになり"

で終わるビットどちらを"で始まり、含まれているビットは、 :

("[^:"]*):([^:"]*") 

$1Q$2の代わりに、これは

1+"Q"+2:xyz 
1+"aQfb"+2:xyz 

あなたが正常に動作greedy matchingにありませんでした理由になります。

+0

ああ、これは私の編集版ではうまくいきます - ありがとうございます – Graham

+1

欲張りのマッチングよりも瞑想するのに時間がかかることを忘れないでください。それはあなたを噛む可能性があり、非常に効率的なツールになる可能性があります。それがどのように動作するかを知ることが重要です。 – Tomalak

関連する問題