2012-07-23 64 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>作为反向引用,但请检查使用正则表达式的语言的参考 - 语言可能略有不同,从而使正则表达式可以正常工作或中断。