2017-10-18 24 views
0

使用正則表達式文字反斜槓我非常新的正則表達式,它似乎\用於元字符。我的問題是我要搜索這個字符串完全\"mediaType\":\"img\"如何使在JS

現在我也想動態把一個變量在IMG。所以我希望它是這樣的

new RegExp(`\"mediaType\":\"${variable}\"`) 

我該如何寫這使它工作?

+1

使用:'new Regex('\\\\「mediaType \\\\」:\\\\「img \\\''')' – anubhava

+1

'\'是兩個javascript字符串中的轉義字符,表達。你必須逃避你的逃跑。此外,你不需要逃避'「'在正則表達式(如果這就是你想要做 – ctwheels

+0

@ctwheels我需要什麼'」'因爲這是我在尋找 –

回答

1

簡短的回答:

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

var expression = new RegExp('\\\\"mediaType\\\\":\\\\"' + escapeRegEx(variable) + '\\\\"'); 
// or, using a template literal: 
var expression = new RegExp(`\\\\"mediaType\\\\":\\\\"${escapeRegEx(variable)}\\\\"`); 

龍答:

除了被用於元字符,反斜線在正則表達式可以用來逃跑,否則將有含義的字符(如*$,括號和\)。因此,在正則表達式中匹配反斜槓的方法是將另一個添加爲轉義字符:\\

考慮到這一點,你想結束了正則表達式是\\"mediaType\\":\\"img\\",如果你使用的是正則表達式文本,這將是它。不幸的是,它需要更多的參與,因爲你需要動態地創建一個表達式,你需要提供表達式作爲一個字符串,其中也需要反斜槓。這增加了第二層轉義,所以你需要再次將每個\字符加倍,並且最終以new RegExp('\\\\"mediaType\\\\":\\\\"img\\\\"')結束。

另一個複雜問題是您要的variable內容被逐字匹配,不能解釋爲正則表達式。不幸的是,在JavaScript中沒有內置的自動轉義正則表達式的方法,因此您需要使用Is there a RegExp.escape function in Javascript?中的一個解決方案。我使用了接受答案的稍微修改版本,將其定義爲獨立函數,而不是將其添加到RegExp對象。只要你逃離動態部分,確切的解決方案並不重要。

+1

或者保留模板文字:''new RegExp('\\\\「mediaType \\\\」:\\\\「$ {escapeRegex(variable)} \\\\」'''''''以避免混淆''''''''' – Bergi

+1

@Bergi這是一個很好的觀點,我習慣於串聯,但他們確實在問題中使用了模板文字,我將其作爲替代方案添加。 –