我目前正在使用替换脚本来自动修复单引号和双引号。
但是,我无法找到解决方案来更改嵌套在其他双引号中的双引号
所以:
“这里有一些额外的文字在开头“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>