JavaScript替换“竖条”的问题

时间:2013-11-27 16:48:28

标签: javascript regex string replace

我有以下代码,用适当的字符替换Microsoft Word中的文本。

message = message.replace(/[\u2018|\u2019|\u201A]/g, "\'"); // smart single quotes and apostrophe
message = message.replace(/[\u201C|\u201D|\u201E]/g, "\""); // smart double quotes
message = message.replace(/\u2026/g, "..."); // ellipsis
message = message.replace(/[\u2013|\u2014]/g, "-"); // dashes
message = message.replace(/\u02C6/g, "^"); // circumflex
message = message.replace(/\u2039/g, ""); // open angle bracket
message = message.replace(/[\u02DC|\u00A0]/g, " "); // spaces

问题是,它用竖笛代替垂直条,例如:|

我猜这是因为我在替换代码|中有message.replace(/[\u201C|\u201D|\u201E]/g, "\"")。我认为它就像OR,但显然不是。

知道如何改进此代码以便|不被替换?

2 个答案:

答案 0 :(得分:1)

在字符类中不需要替换(由|个字符表示):

message = message.replace(/[\u2018\u2019\u201A]/g, "\'"); // smart single quotes and apostrophe
message = message.replace(/[\u201C\u201D\u201E]/g, "\""); // smart double quotes
message = message.replace(/\u2026/g, "..."); // ellipsis
message = message.replace(/[\u2013\u2014]/g, "-"); // dashes
message = message.replace(/\u02C6/g, "^"); // circumflex
message = message.replace(/\u2039/g, ""); // open angle bracket
message = message.replace(/[\u02DC\u00A0]/g, " "); // spaces

或使用简单的替换而不是字符类:

message = message.replace(/\u2018|\u2019|\u201A/g, "\'"); // smart single quotes and apostrophe
message = message.replace(/\u201C|\u201D|\u201E/g, "\""); // smart double quotes
message = message.replace(/\u2026/g, "..."); // ellipsis
message = message.replace(/\u2013|\u2014/g, "-"); // dashes
message = message.replace(/\u02C6/g, "^"); // circumflex
message = message.replace(/\u2039/g, ""); // open angle bracket
message = message.replace(/\u02DC|\u00A0/g, " "); // spaces

答案 1 :(得分:1)

您将\u个字符放在[ ]个字符类/组中。这已经对包含的字符进行了隐式OR。在字符类之外,|是OR,但在其中是文字|

删除|应该有效:

message.replace(/[\u201C\u201D\u201E]/g, "\"")

或者,您可以将它们从角色类中取出,并保留|

message.replace(/\u201C|\u201D|\u201E/g, "\"")

您可能认为看起来更干净/更容易阅读(如果可以说任何正则表达式)。如果您想进行其他类型的匹配,这两种方法之间存在差异,但就您的目的而言,这些方法在功能上是等效的。