[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時會變成
使用自定義的escapeRegExp function先將問號跳脫掉, 之後就會被視為正常的字串了
假設我有個字串是:
"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先將問號跳脫掉, 之後就會被視為正常的字串了
留言
張貼留言