You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将用户输入双引号替换为规范左右引号?解决代码空格限制问题

修复引号前后无空格时的替换失效问题

嘿,我瞅见你这段处理引号替换的代码遇到了小问题——只能搞定前后带空格的引号,像"test"这种紧挨着文字的完全没效果对吧?别担心,咱们调整下正则逻辑,就能覆盖所有场景的ASCII双引号替换:

修正后的完整代码

$('#myInput').on("keyup", function(e) {
  // 匹配行首或非右引号后的双引号,替换为左引号
  this.value = this.value.replace(/(^|[^”])"/g, '$1“');
  // 匹配行尾或非左引号前的双引号,替换为右引号
  this.value = this.value.replace(/"([^“]|$)/g, '”$1');
});

为啥原来的代码不行?

原来的正则/ "/g/" /g只匹配带有空格的引号,完全忽略了引号直接跟文字、数字或标点的情况,比如"hello"world""123"这些场景都没覆盖到。

新正则的逻辑拆解

  • 第一个正则/(^|[^”])"/g

    • ^匹配字符串开头的引号,比如"开头的内容
    • [^”]匹配不是右引号的任意字符,确保不会把已经转换好的再当成左引号处理
    • 替换时用$1保留引号前面的内容(如果有的话),再加上规范左引号
  • 第二个正则/"([^“]|$)/g

    • $匹配字符串结尾的引号,比如内容结尾"
    • [^“]匹配不是左引号的任意字符,避免把已经转换好的再当成右引号处理
    • 替换时先加规范右引号,再用$1保留引号后面的内容(如果有的话)

额外小优化

如果想避免在连续输入时反复触发替换(比如已经是中文引号了还被处理),上面的代码已经通过[^”][^“]避免了重复转换的问题,日常使用足够啦。

内容的提问来源于stack exchange,提问作者Takit Isy

火山引擎 最新活动