JavaScript 将问题替换为 "vertical bar"

标签 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 但显然不是。

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

最佳答案

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

删除 | 应该可以:

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

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

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

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

关于JavaScript 将问题替换为 "vertical bar",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20248316/

相关文章:

javascript - 在 Promise 中,使用 catch 和 then 的第二个参数有什么区别?

javascript - ng-href ="#/myanchor"不再像往常一样使用 angularjs 1.6.1

javascript - 如何从 then 和 catch block 中捆绑一个 Promise

asp.net - asp.net 帮助的正则表达式

c# - 小数且仅限正数值

string - 如何从表中删除字符串

javascript - 如何使用输入文件两次

regex - 一行中双字符的奇数个 (GREP)

python - 拆分字符串并保存逗号 int python

java - Java 中最接近 NSScanner 的东西