JavaScript将问题替换为“问题”;竖条“;

JavaScript将问题替换为“问题”;竖条“;,javascript,regex,string,replace,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

我有以下代码,用正确的字符替换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
问题是,它用撇号替换了垂直条,例如:
|

我猜这是因为我在replace code
消息中有


您知道如何改进此代码以使
不被替换吗?

您不需要在字符类中进行替换(由
字符表示):

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
或者使用简单的替换而不是字符类:

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

您正在将
\u
字符放入
[]
字符类/组中。这已经对包含的字符执行隐式或。在字符类之外,
是或,但在其内部是文本

删除
|
应该可以:

message.replace(/[\u201C\u201D\u201E]/g, "\"")
或者,您可以将它们从character类中取出,并保留

message.replace(/\u201C|\u201D|\u201E/g, "\"")
您可能会认为这看起来更干净/更容易阅读(如果可以对任何正则表达式这样说的话)。如果您想进行其他类型的匹配,这两种方法之间存在差异,但出于您的目的,它们在功能上是等效的