当前位置: 首页 > 知识库问答 >
问题:

如何用单引号替换嵌套在另一个双引号中的双引号

卢鸿彩
2023-03-14

我目前正在使用一个替换脚本来自动修复单引号和双引号。

但是,我找不到一个解决方案来更改嵌套在另一个双引号内的任何地方的双引号

“在'abc'开头和结尾有一些额外的文本”

目前,我只能自动修复这个类型,如果它在其他引号旁边(例如“abc”)使用一个简单的替换脚本

.ReplaceAll(“”“”“”“”).ReplaceAll(“”“”“”“”“)

function fixTextarea(textarea) {
  textarea.value = textarea.value.replace(" ,", ",")
    .replaceAll(" ;", ";")
    .replaceAll(" .", ".")
    .replaceAll("  ", " ")
    .replaceAll("   ", " ")
    .replaceAll("“ ", "“")
    .replaceAll(" ”", "”")
    .replaceAll("““", "“‘")
    .replaceAll("””", "’”")
    .replaceAll(/(^|[-\u2014\s(\["])'/g, "$1\u2018")
    .replaceAll(/'/g, "\u2019")
    .replaceAll(/(^|[-\u2014/\[(\u2018\s])"/g, "$1\u201c")
    .replaceAll(/"/g, "\u201d")
};

function fixtext() {
  let textarea = document.getElementById("textarea1");
  textarea.select();
  fixTextarea(textarea);
}

window.addEventListener('DOMContentLoaded', function(e) {
  var area = document.getElementById("textarea1");

  var getCount = function(str, search) {
    return str.split(search).length - 1;
  };

  var replace = function(search, replaceWith) {
    if (typeof(search) == "object") {
      area.value = area.value.replace(search, replaceWith);
      return;
    }
    if (area.value.indexOf(search) >= 0) {
      var start = area.selectionStart;
      var end = area.selectionEnd;
      var textBefore = area.value.substr(0, end);
      var lengthDiff = (replaceWith.length - search.length) * getCount(textBefore, search);
      area.value = area.value.replace(search, replaceWith);
      area.selectionStart = start + lengthDiff;
      area.selectionEnd = end + lengthDiff;
    }
  };

});
<textarea class="lined" id="textarea1" name="textarea1" spellcheck="true" placeholder="" onpaste="console.log('onpastefromhtml')"></textarea>
<br><br>
<button onclick="fixtext()"> Fixit</button>

共有1个答案

周博达
2023-03-14

您可以跟踪引号嵌套的深度(无论是否双引号),并以这样一种方式替换它们,即在偶数深度上它们是双引号,在奇数深度上它们是单引号。一个预防措施是在中排除撇号(在其他一些例外情况下,撇号不应作为引号的结尾):

let s = "“Here’s some extra text at the beginning “abc” and at the end”";

let depth = 0;
let result = s.replace(/[“”‘]|’(?!s)/g, m => 
    "“‘".includes(m) ? "“‘"[depth++] : "”’"[--depth]);

console.log(result);
 类似资料:
  • 问题内容: 如何使用PHP 用(我认为其称为单引号)替换(我认为它称为双引号)? 问题答案: 或重新分配

  • 问题内容: 我正在读取CSV文件,并且有一些值,例如 将文件读取为并转换后,我将文件内容分割为:。 在迭代字符串时,我得到以下值: 如何将两个双引号替换为像这样的“双”的单双 这是我的代码:- 问题答案: 使用。 http://ideone.com/xPQqL

  • 本文向大家介绍js 单引号替换成双引号,双引号替换成单引号的实现方法,包括了js 单引号替换成双引号,双引号替换成单引号的实现方法的使用技巧和注意事项,需要的朋友参考一下 1.双引号替换成单引号 2.单引号替换成双引号 以上这篇js 单引号替换成双引号,双引号替换成单引号的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 对于PHP中的自定义脚本解析器,我想替换包含双引号和单引号的多行字符串中的一些单词。但是,只能替换引号之外的文本。 例如,我想把“苹果”换成“梨”,但只在引用句子之外。所以在这种情况下,只有“许多苹果从树上掉下来”里面的“苹果”才是目标。 以上将给出以下输出: 我怎样才能做到这一点?

  • 问题内容: 因此,我正在编写一个程序,将文本文件分解为单词,然后将列表写入新的文本文件。 我遇到的问题是我需要列表中的字符串使用双引号而不是单引号。 例如 我得到这个当我想这个 这是我的代码 我是python的新手,对此一无所获。有人知道如何解决吗? [编辑:我忘了提及我在arduino项目中使用的输出,该项目要求列表具有双引号。 问题答案: 您无法更改的工作方式。 如何使用用于字符串的JSON格