2016-12-03 61 views
-1

我有一個是這樣的字符串:正則表達式:逃逸「/ \」/g的不工作

/* ACTUAL DATA */ 

\n\nsampleArr[0] = { 
    \n\t\tid: '28375023', 
    \n\t\ttelephoneNumber: 5558378402, 
    \n\t\tage: \" 4 \", 
    \n\t\tmessageID: '287592', 
    \n\t\tcommentID: '23845702', 
    \n\t\tfoobar: 'foobar' \n\t 
}; 

我能夠刪除所有\ n \ t \ t使用正則表達式,但就是做不到處理它有「4」的年齡部分。

const input = String.raw`{ 
 
    name: 'foo', 
 
    age: 12, 
 
    address: \"1212 Mason st. \", 
 
    zipcode: '12345', 
 
    state: \"CA\" 
 
}`; 
 

 
console.log(input.replace(/\\"/g, "'"));

我的主要目標是把它變成一個對象。然而,轉義字符「正在創造一些重大問題,我嘗試使用str.replace(/\\"/g, "'"),好像它不匹配也沒有取代它,但在https://regex101.com上,它肯定是選擇了所有的。有什麼建議麼?

+0

你確定字符串實際上包含這些字符嗎?如果我創建一個字符串* *看起來像這樣,那麼你的正則表達式工作:https://jsfiddle.net/jgkyvno4/(你的字符串從哪裏來?) – nnnnnn

+0

@nnnnnn字符串來自哪裏不是問題。我被困在其他開發人員身邊。我意識到它不是一個有效的字符串文字。然而,當你用'替換'將會把它變成一個有效的字符串 因此,爲什麼我試圖用正則表達式把它變成一個有效的字符串 – DevBear15

+0

假設你的樣本數據中的換行符實際上對應於' n'換行符,而反斜槓轉義雙引號是物理反斜槓,那麼你的替換應該工作,所以還有其他事情必須繼續進行。請參閱修改後的剪切。 – 2016-12-03 06:09:43

回答

2

假設反斜槓在您的輸入中轉義雙引號是物理反斜槓,那麼您的替換應該工作,所以其他事情必須進行。

const input = String.raw`{ 
 
    name: 'foo', 
 
    age: 12, 
 
    address: \"1212 Mason st. \", 
 
    zipcode: '12345', 
 
    state: \"CA\" 
 
}`; 
 

 
console.log(input.replace(/\\"/g, "'"));

在上文中,我們使用template strings指定多行輸入,並String.raw避免解釋\"逃逸(正如提供所述輸入字符串的一種方便的方法)。

注意,這將如果字符串本身包含轉義引號,失敗,因爲在

address: \"685 9th \"A\" Main Rd.\", 

最終的解決方案是讓後端或不管是誰生產這些字符串沒有逃脫雙引號,除非他們發生的字符串。換句話說,生成適當的JSON。