如何在文本区域中用逗号替换句点?

问题描述

我已经创建了一个简单的文本区域,其中的某些字符会自动替换,例如,将直引号替换为智能引号,将双破折号替换为em破折号,将双破折号替换为单个空格。

但是现在我对如何添加用于替换的脚本感到困惑:(不带引号)

word . as word.

word,as word,

word ; as word;

我只想在逗号,句号和分号之前以及类似“

Hello world ;应该由Hello world;自动替换

这是我当前的脚本:

    var $message = $("#textarea1");

    $message.on("keydown keypress",function() {    
        var $this = $(this),val = $(this).val()
                         .replace(/(^|[-\u2014\s(\["])'/g,"$1\u2018")
                         .replace(/'/g,"\u2019")
                         .replace(/(^|[-\u2014/\[(\u2018\s])"/g,"$1\u201c")
                         .replace(/"/g,"\u201d")
                         .replace(/--/g,"\u2014")
                         .replace(/ +(?= )/g,'');

        $this.val(val);
    });

我找不到要替代的实体。有人碰巧已经为此使用了现有代码吗?

如果我尝试

.replace(/ ;/g,"\;")

.replace(/ /g,"\;")

这行不通。

解决方法

您可以使用.replace(/\s+(;|,|\.)/,'$1');删除分号,逗号或句点之前的所有空格。

var $message = $("#textarea1");

$message.on("keydown keypress",function() {    
  var $this = $(this),val = $(this).val()
  .replace(/(^|[-\u2014\s(\["])'/g,"$1\u2018")
  .replace(/'/g,"\u2019")
  .replace(/(^|[-\u2014/\[(\u2018\s])"/g,"$1\u201c")
  .replace(/"/g,"\u201d")
  .replace(/--/g,"\u2014")
  .replace(/ +(?= )/g,'')
  .replace(/\s+(;|,'$1');

  $this.val(val);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="textarea1"></textarea>