如何在JavaScript之后大写首字母,问号和感叹号?

时间:2016-10-07 13:54:18

标签: javascript regex

我有一个textarea,我希望每个句子中的每个首字母大写。

现在我有了这个:

evt.target.value = evt.target.value.replace(/.+?[\.\?\!](\s|$)/g, function(a) {
    return a.charAt(0).toUpperCase() + a.slice(1);
});

这是在af函数中,其中evt.target是textarea,函数在keyup上调用。

它很有效,但它没有立即大写。 如果我写:

  

嘿。我需要一些正则表达式。

然后"我"只有当我把一段时间放在"这个"时才会大写。我希望它能把这个" I"键入后立即,如果它出现在"之后。 >空格<"或"! >空格<"或"? >空格<"

我试过谷歌搜索很多东西,但不幸的是,这个正则表达式的东西对我来说太复杂了。有没有人可以正确地写这个,快速解释一下?

2 个答案:

答案 0 :(得分:2)

我迟到了,但也许有人需要jQuery代码。 这也适用于第一句话。

$('input').on('input', function (evt) {
    var $this = $(evt.target),
        re = /(^|[.!?]\s+)([a-z])/g,
        val = $this.val().replace(re, function (m, $1, $2) {
            return $1 + $2.toUpperCase();
        });
    $this.val(val);
});

https://jsfiddle.net/chukanov/oqg5o88u/1/

es6更新:

let re = /(^|[.!?]\s+)([a-z])/g;
$('input').on('input', function (evt) {
  let $this = $(this),
      val = $this.val().replace(re, (m, $1, $2) => $1 + $2.toUpperCase());
  $this.val(val);
});

https://jsfiddle.net/chukanov/oqg5o88u/27/

答案 1 :(得分:1)

我建议使用/([!?.]\s+)([a-z])/g正则表达式并将匹配传递给替换回调函数,以便仅在第二个捕获组的上方:

let log  = document.querySelector('#log'),
    test = document.querySelector('#test');

test.addEventListener('input', e => {
    log.innerHTML = e.target.value.replace(/([!?.]\s+)([a-z])/g, function(m, $1, $2) {
        return $1+$2.toUpperCase();
    });
});
<input type='text' id='test' autofocus /><br />
<span id='log'></span>

模式详细信息

  • ([!?.]\s+) - 第1组捕获!?.以及1个或多个空格(请注意,将+替换为* ,将允许零个或多个空格)
  • ([a-z]) - 第2组捕获小写ASCII字母。
相关问题