JavaScript将问题替换为“;垂直条”;

JavaScript replace issue with "vertical bar"

本文关键字:垂直 问题 替换 JavaScript      更新时间:2023-11-21

我有以下代码,用正确的字符替换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,但显然不是。

你知道我如何改进这个代码,使|不被替换吗?

您正在将'u字符放入[ ]字符类/组中。这已经对包含的字符执行了隐式"或"运算。在字符类之外,|是OR,但在它内部是一个文字|

移除|应该有效:

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

或者,您可以将它们从字符类中取出,并保留|:

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

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

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

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