簡體   English   中英

正則表達式用於轉義特殊字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM