【问题标题】:How to remove single and double quotes from string but keep it on specific apostrophe words如何从字符串中删除单引号和双引号,但将其保留在特定的撇号上
【发布时间】:2020-12-11 19:16:52
【问题描述】:

所以,我得到了这个短语:

“然后,维德对卢克说:‘卢克,我是你的父亲’。”

我知道我可以简单地去掉 all 引号,例如:

let string = "And then, Vader said to Luke: 'Luke, I'm your father'.";
string.replace(/['"`]/g, '');

问题是我想在像 I'm 这样的特定单词上保留撇号(也许作为参数传递给函数) 我该怎么做?

【问题讨论】:

  • 我的回答是否解决了问题?如果是,请考虑接受答案。

标签: javascript regex string replace quote


【解决方案1】:

你可以使用

let string = "And then, Vader said to Luke: 'Luke, I'm your father'.";
console.log(string.replace(/\b(')\b|['"`]/g, '$1')); // if in between word chars
console.log(string.replace(/([a-zA-Z]'[a-zA-Z])|['"`]/g, '$1')); // if in between ASCII letters
console.log(string.replace(/(\p{L}'\p{L})|['"`]/gu, '$1')); // if in between any Unicode letters

关键是要捕获位于创建上下文的字符之间的',您要在其中保留单引号,然后替换为对第一个捕获组的反向引用。

\b(')\b 部分匹配字符串开头/结尾之间的 ' 或非单词字符和单词字符,同时将 ' 捕获到第 1 组,或 (|) ['"`]在任何其他上下文中匹配字符类中的三个字符中的任何一个。由于$1,对第1组值的反向引用,总是初始化为一个空字符串,用它替换总是会带来预期的结果,如果'在单词字符之间不匹配,它将为空,或者它将包含' 被保留。

最后一行代码将支持任何 Unicode 字母,因为 \p{L} 匹配任何语言的任何字母,并且由于 u 修饰符,它可以工作。请注意,在撰写本文时它尚未得到普遍支持,但大多数主要浏览器和环境已经支持它。

【讨论】:

    猜你喜欢
    • 2021-02-26
    • 2017-05-08
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多