如何解决如何在自动替换脚本的textarea中使用直引号和智能引号?
我真的对如何正确地组合这些行以将直引号自动替换为文本区域中的智能引号感到困惑。
它工作得更早了,但是在我添加了一行来固定光标替换字符后将光标移到末尾。
这是当前的样子:
var area = document.getElementById("textarea1");
var getCount = function (str,search) {
return str.split(search).length - 1;
};
var replaceText = function (search,replaceWith) {
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;
}
};
area.addEventListener("keypress",function (e) {
setTimeout(function () {
replaceText(",",")
replaceText(" ;",";")
replaceText(" .",".")
replaceText(" "," ")
replaceText("--","—")
replaceText(/(^|[-\u2014\s(\["])'/g,"$1\u2018")
replaceText(/'/g,"\u2019")
replaceText(/(^|[-\u2014/\[(\u2018\s])"/g,"$1\u201c")
replaceText(/"/g,"\u201d");
},0)
});
<textarea id="textarea1" cols="40" rows="8"></textarea>
逗号,分号,句号,破折号和双精度空格已经可以使用了,但是不能用引号引起来。我该怎么做才能更正这些正则表达式行?
这正是我被困的地方:
replaceText(/(^|[-\u2014\s(\["])'/g,"$1\u2018")
replaceText(/'/g,"\u2019")
replaceText(/(^|[-\u2014/\[(\u2018\s])"/g,"$1\u201c")
replaceText(/"/g,"\u201d");
预先感谢
解决方法
在您的 replaceText 中,您需要区分何时传递正则表达式或字符串。 .indexOf()不接受正则表达式。
此外,我建议使用input来更改按键事件。
摘要:
window.addEventListener('DOMContentLoaded',function(e) {
var area = document.getElementById("textarea1");
var getCount = function (str,search) {
return str.split(search).length - 1;
};
var replaceText = 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;
}
};
area.addEventListener("input",function (e) {
replaceText(",",");
replaceText(" ;",";");
replaceText(" .",".");
replaceText(" "," ");
replaceText("--","—");
replaceText(/(^|[-\u2014\s(\["])'/g,"$1\u2018");
replaceText(/'/g,"\u2019");
replaceText(/(^|[-\u2014/\[(\u2018\s])"/g,"$1\u201c");
replaceText(/"/g,"\u201d");
});
});
<textarea id="textarea1" cols="40" rows="8"></textarea>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。