2012-07-23 63 views
2

的Firefox 10將觸發以下警告...JavaScript:替換正則表達式插入 n換行後。

八進制文字和八進制轉義序列已被棄用

...用下面的正則表達式(在\1\n最後一部分)...

var d = c.textContent.replace(/\([!.?]\)/g,'\1\n'); 

記住一些Apache的正則表達式我做了後,我就修改爲這一點,雖然沒有更多的警告輸出不顯示任何換行...

var d = c.textContent.replace(/\([!.?]\)/g,'$1\n'); 

不要編輯我的帖子,如果您有問題的評論,而我很樂意澄清。

+1

爲什麼你問人不要編輯你的帖子? – 2012-07-23 03:33:25

+1

因爲99.9%的時間我不得不恢復他們,所以他們恢復了預期的意義,而不是其他人想要問的問題,而不是在他們自己的問題中發佈他們自己的解釋。例如。如果我問一個KDE的問題,有人會將它編輯成與Gnome相關的問題/答案是完全不同的。 – John 2012-07-23 03:34:49

+4

** @ John **。它只是擊敗了SO的目的。我懷疑編輯會無緣無故地將「KDE」改爲「Gnome」。 – elclanrs 2012-07-23 03:38:43

回答

4

它工作正常(http://jsfiddle.net/zerkms/Rr4Yy/),如果你不逃避括號:

​​ 在你的代碼

有轉義字符:

var d = c.textContent.replace(/\([!.?]\)/g,'$1\n'); 
           ^------^----- ??? 
+0

這很有效,你的解釋在視覺上很有幫助,謝謝。 – John 2012-07-23 03:48:59

2
var d = c.textContent.replace(/\([!.?]\)/g,'$1\n'); 

我在這裏可以看到一個問題:您的$1引用正則表達式中的第一個括號內的部分。但是,您的正則表達式不包含括號內的部分。但是,在正則表達式中有一些字面括號字符(請參見\(\),它們分別與輸入中的字面括號()相匹配)。也許你並不是說這些是文字。

如何解決這取決於如果你正在尋找(!)(.),或(?),或者如果你真的只是尋找!.,或?。無論哪種方式,你可能想要$1$&,因爲如果你想引用整個匹配的文本,你實際上不需要括號內的部分。

以下(!)之後應該插入換行符,(.),或(?)

c.textContent.replace(/\([!.?]\)/g,'$&\n'); 

以下!之後應該插入換行符,.,或?

c.textContent.replace(/[!.?]/g,'$&\n'); 

More information about how this works here

+1

這生產(使用警報顯示輸出)... C = [對象HTMLParagraphElement] d =哦亥$ 0 你怎麼$ 0 這很好$ 0 看$ 0 – John 2012-07-23 03:50:53

+0

哎呦,固定。當我使用'$&'時,我正在使用'$ 0'。對於那個很抱歉。 – thomasrutter 2012-07-23 04:06:31

1

你可能想要:

var d = c.textContent.replace(/([!.?])/g,'$1\n'); 

\(在bash擴展正則表達式是等效於在Perl兼容正則表達式和其方言(Java腳本實現PCRE的子集)(

替換字符串中的反向引用是在Javascript正則表達式中的$<number>。我記得其他語言允許\<number>作爲反向引用,但請檢查使用正則表達式的語言的參考 - 語言可能略有不同,從而使正則表達式可以正常工作或中斷。