[js] 當字串中有問號時, new RegExp 不會正確產生出 regular expression

Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

假設我有個字串是:
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_g8igsGxA4wQ6arjGkrNM9_NElCV80l6lZneDKBq1ij2DM_L9YQ"
在產生regular expression時會變成

let reg = new RegExp("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_g8igsGxA4wQ6arjGkrNM9_NElCV80l6lZneDKBq1ij2DM_L9YQ", 'g');
// https:\/\/encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_g8igsGxA4wQ6arjGkrNM9_NElCV80l6lZneDKBq1ij2DM_L9YQ
// 中間的問號其實是應該視為字元的

//solution:
function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
let str = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_g8igsGxA4wQ6arjGkrNM9_NElCV80l6lZneDKBq1ij2DM_L9YQ";
reg = new RegExp(escapeRegExp(str), 'g');


使用自定義的escapeRegExp function先將問號跳脫掉, 之後就會被視為正常的字串了

留言

這個網誌中的熱門文章

[MySQL] schema 與資料類型優化

[翻譯] 介紹現代網路負載平衡與代理伺服器