【问题标题】:Delete quotes between quotes删除引号之间的引号
【发布时间】:2019-08-29 12:58:45
【问题描述】:

删除所有引号和引号之间的特殊字符。

我有这行:"The quick "brown-fox" "jumps" over the lazy dog",我想做的是保留引号,但删除它们之间的所有引号和特殊字符,例如,这行将变为:"The quick brown fox jumps over the lazy dog"

我有一点点正则表达式来查找带引号的字符串:(["'])(?:\\\1|.)*?\1

但是;我想要做的实际上是删除引号之间的特殊字符。我最近才发现正则表达式,它可以做很多事情,但我还在学习。

【问题讨论】:

  • 您的问题并不完全明确。您只是想删除除最左边和最右边之外的所有引号吗?或者您想删除仅由字母分隔的引号?如果将“他对我说”他说“”添加到您的示例中会怎样?像 "he said"she "said 这样的格式错误的输入呢?

标签: regex


【解决方案1】:

你可以试试:

let string = `"The quick "brown-fox" "jumps" over the lazy dog"`.replace(/(?<=.)"(?=.)/g, "");

console.log(string);

JS 演示:https://jsfiddle.net/jorgesanure/vca2gsxm/

为了在 sublime 中使用它,只复制这个(?&lt;=.)"(?=.)

【讨论】:

  • JS 不支持正向后视。随意展示这个工作示例:regex101.com/r/FE4XKN/1
  • 太棒了!那很快,但是我很抱歉,先生;我应该提到我是从 Sublime Text 做的。据我了解,有不同类型的正则表达式,这似乎不适用于 Sublime。
  • 复制这个:(?&lt;=.)"(?=.)
  • 你们太棒了。像魅力一样工作,也很简单。很惊讶我无法做到这一点。非常感谢你们:)
【解决方案2】:

很确定有很多有效的方法/表达式可以做到这一点,但我想不出一种,也许我们会尝试三种表达方式,一种类似于:

((?:[^"\r\n-])*)|((?!(^"|"$)).)+?

替换$1,后跟一个空格,它将打印:

"The quick   brown  fox     jumps   over the lazy dog "  

Demo 1

然后,用第二个表达式,

\s{2,}

并用一个空格替换:

 "The quick brown fox jumps over the lazy dog " 

Demo 2

还有第三个表达式,

\s*"\s*

替换",我们可能会得到:

"The quick brown fox jumps over the lazy dog" 

Demo 3

不需要的字符进入 char 类:[^"\r\nUndesired_Chars_Goes_here-]

【讨论】:

  • 感谢艾玛的回复。我还在学习正则表达式,这真的很酷,有不止一种方法可以做到这一点。如果我想删除引号内的引号但仅在某个单词之后怎么办?例如:{这是我的文字:“快速的“红狐”跳过了“懒狗”,很有趣”} 这就是我所拥有的,但我可能对如何应用它感到困惑:(?
  • 这个想法是删除字符串中 (text:) 之后的所有引号,所以它看起来像这样:{这是我的文字:“快速的红狐狸跳过了懒惰的狗,很有趣” }
猜你喜欢
  • 2018-05-30
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2021-07-03
相关资源
最近更新 更多