2017-08-02 46 views
-1

我在使用javascript替換函數時遇到問題。當搜索模式包含Javascript替換函數不工作? mark

"demo text?for test".replace(new RegExp("text?for", 'g'), "text for"); 

它的返回輸出是「用於測試的演示文本?」。

我想,我錯過了一些東西,但我不知道。

下面是我的功能我在應用程序中使用

var replaceAll = function (targetString, search, replacement) { 
      return targetString.replace(new RegExp(search, 'g'), replacement); 
     }; 

replaceAll("This is my favorite video https://www.youtube.com/watch?v=n3MPiLq0fKc", "video https://www.youtube.com/watch?v=n3MPiLq0fKc", "http://d-d.co/4eDED") 

輸出是「這是我最喜歡的視頻https://www.youtube.com/watch?v=n3MPiLq0fKc

+1

'?'在正則表達式中有特殊含義。你需要逃避那個角色。 – zzzzBov

回答

1

你的代碼的工作,只要你提供的正則表達式作爲封閉在/字符串並用特殊字符的正確轉義,像這樣:

var replaceAll = function(targetString, search, replacement) { 
 
    return targetString.replace(new RegExp(search, 'g'), replacement); 
 
}; 
 

 
console.log(replaceAll("This is my favorite video https://www.youtube.com/watch?v=n3MPiLq0fKc", /video https:\/\/www\.youtube\.com\/watch\?v=n3MPiLq0fKc/, "http://d-d.co/4eDED"))

+0

感謝您的回覆。我們可以在替換之前通過任何javascript函數在文本中添加轉義字符嗎? –

+0

RegExp.escape = function(s){ return s.replace(/ [ - \/\\^$ * +?。()| [\] {}]/g,'\\ $ &'); }; –