【发布时间】:2021-02-04 08:38:31
【问题描述】:
我目前正在使用替换脚本来自动修复单引号和双引号。
但是,我找不到更改嵌套在另一个双引号内的双引号的解决方案
这样:
“这是在“abc”开头和结尾处的一些额外文字”
应该是
“这里有一些额外的文字,在'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 获取到长度 - 2),替换此中的所有引号内部字符串,并放回外部引号。
-
很抱歉,由于我刚开始学习 javascript 和正则表达式,我无法理解您的建议。能详细点吗?
标签: javascript regex