[英]RegEx for escaping special characters
嘗試RegExp生成用於字符串匹配的正則表達式。 與docs中指定的轉義混淆了。 每當使用RegExp構造函數類型輸入字符串時,都需要使用該文檔中提供的函數進行轉義。
正確使用文字方法
"test".match(/te*/gi)
輸出:
['te','t']
當我嘗試使用RegExp構造函數進行相同操作時,輸出會有所不同。
rg="te*"
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
exp = new RegExp(escapeRegExp(rg),'gi')
console.log("exp =>", exp);
console.log("test".match(exp));
輸出:
exp => / te * / gi
空值
'*'之前會有反斜杠嗎? 是否正確逃脫了? 為什么生成的正則表達式與文字表達式不同? 我無法弄清楚該文檔中缺少的內容。
感謝您幫助指出此處的錯誤!
因為您不想轉義*
-這是一個正則表達式字符:
const temp = "te*"; const reg = new RegExp(temp, "gi"); console.log("test".match(reg));
我的疑問是[\\ ^ $。 | ? alone need to be escaped. * +()所有這些都需要在傳遞新的RegExp()之前進行轉義,或者僅需單獨轉義 。 我不清楚哪個需要逃避還是不逃避?
您所參考的文檔部分的開頭就回答了您的問題。 再讀一遍:
如果您需要按字面使用任何特殊字符(例如,實際上是搜索“ *”),則必須對其進行轉義...
相反,如果您需要任何特殊字符來具有其特殊含義,則不得轉義它。
除上述內容外,如果從字符串常量分配,則要放在字符串中的任何反斜杠都必須加倍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.