【发布时间】:2018-09-23 18:12:40
【问题描述】:
我正在寻找一种在用户输入中用“更正”的引号替换引号的方法。
想法
这里有一个sn-p简单说明原理:
对于引号,“正确”的引号有一个开头 “ 和一个结尾 ”,因此需要以好的方式替换它。
$('#myInput').on("keyup", function(e) {
// The below doesn't work when there's no space before or after.
this.value = this.value.replace(/ "/g, ' “');
this.value = this.value.replace(/" /g, '” ');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="myInput"></textarea>
但上述方法并非在所有情况下都有效。
例如,当“引用的单词”位于句子或行的开头或结尾时。
示例
可能的输入(当心,法语在里面!:)):
⋅ 我很“快乐”! Ça y est, j'ai "osé", et mon "âme sœur" était au rendez-vous...
⋅ 标语上写着:“一些文字‘一些文字’一些文字。”和“注意这里的空格!”
⋅ "Inc" 或"rect" 引号"不应被替换。
⋅ 我说:“如果它也适用于'单曲',我会更喜欢它!”
正确的输出:
⋅ 我很“快乐”! Ça y est, j'ai “osé”, et mon “âme sœur” était au rendez-vous...
⋅ 标语上写着:“一些文字‘一些文字’一些文字。”和“注意这里的空格!”
⋅ “Inc”或“rect”引号不应被替换。
⋅ 我说:“如果它也适用于‘单曲’,我会更喜欢它!”
输出不正确:
⋅ 标语上写着:“一些文字”一些文字“一些文字”。和 […]
为什么不正确:
→ 引号的结尾和结束标记之间不应有空格。
→ 右引号和单词之间应该有一个空格。
→ 单词和左引号之间应该有一个空格。
→ 左引号与其引文之间不应有空格。
需要
如何在所有这些情况下有效且轻松地替换引号?
如果可能的话,我还希望解决方案能够“更正”引号,即使我们在输入整个句子之后添加它们。
请注意,我不(不能)在正则表达式中使用单词分隔符“\b”,因为“很遗憾,重音字符,例如“é”或“ü”被视为分词。” (来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)
当然,如果没有其他解决方案,我会提出一个我认为是单词分隔符的列表,并在正则表达式中使用它。但我更喜欢有一个很好的工作函数而不是一个列表!
任何想法都将不胜感激。
【问题讨论】:
-
你为什么不直接使用
replace(/"/g, '”')? -
@str,
”不适合引用的开头。 -
你能展示一些样本输入和它们的样本输出吗?这样所有的边缘情况都可以处理了吗?
-
@TarunLalwani,我添加了一些示例。当心,法国人!
-
@TakitIsy,当有人输入
"tarun lalwani"时会发生什么?是不是也变成了“tarun lalwani”?
标签: javascript jquery regex