【问题标题】:How to replace double quotes with single quotes inside of a string using regex?如何使用正则表达式在字符串中用单引号替换双引号?
【发布时间】:2019-04-01 11:21:09
【问题描述】:

我有一个包含//script[@data-type="application/ld+json"]的页面

此脚本的内容与以下类似。

<script>
{
  "one": "some text here",
  "two": "some "other" text here"
}
</script>

是否可以使用正则表达式将双引号替换为单引号,所以我有:

"two": "some 'other' text here"

或者完全删除内引号

我可以使用replace函数

主要问题是我不知道如何只匹配字符串中的引号。

【问题讨论】:

  • 使用像 Perl 这样的特色引擎会很困难,更不用说使用 replace() 函数了,相比之下,它使用的语法非常有限。所以不,这是不可能的。

标签: regex xml xpath


【解决方案1】:

一般来说,因为您的内容不明确,所以无法完成。考虑:

{
  "one": "some text here",
  "two": "some ", "three": " text here"
}

你必须采用一些规则,比如说some 之后的" 如果后面跟着,}(可选地以空格开头),则被视为终端引号,或者作为否则为嵌套字符串。这种逻辑似乎远远超出了你可以用正则表达式表达的东西。无论如何,它有时会给你错误的答案。

【讨论】:

    【解决方案2】:

    如果是这样,也许你应该试试下面的正则表达式。

    "(?=\w+"| )(?!\w+":)
    

    我没有你所有的范围,我只是根据你放在这里的模式写的。

    您可以在 Sublime 或 https://regexr.com/ 上测试您的正则表达式

    【讨论】:

    • 谢谢。似乎没有按预期工作。即使没有内引号,它也匹配第一个(起始)引号
    • 如果第一部分也类似于 { "one" : "some text here", "two" : "some ", "three": " text here" }之前的空格:
    猜你喜欢
    • 2012-09-10
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2015-01-22
    相关资源
    最近更新 更多