【问题标题】:How to capitalize first letter after period, question mark and exclamation in JavaScript?如何在 JavaScript 中将句号、问号和感叹号后的第一个字母大写?
【发布时间】:2016-10-07 13:54:17
【问题描述】:

我有一个文本区域,我希望每个句子中的每个首字母都大写。

现在我有了这个:

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

这在 af 函数中,evt.target 是文本区域,该函数在 keyup 上调用。

效果很好,只是它不会立即大写。 如果我写:

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

只有当我在“this”末尾加上句号时,“I”才会大写。我希望它在键入后立即将“I”大写,如果它出现在“。>空白空白空白

我尝试用谷歌搜索很多东西,但不幸的是,这个正则表达式的东西对我来说太复杂了。谁能正确地写这个并快速解释一下?

【问题讨论】:

  • 可能是.replace(/([!?.]\s+)([a-z])/g, function(m, $1, $2) {return $1+$2.toUpperCase();})?
  • 我推荐你访问 www.regex101.com 进行正则表达式测试...

标签: javascript regex


【解决方案1】:

我迟到了,但也许有人需要 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/

【讨论】:

  • 很棒的解决方案@AntonChukanov!非常感谢! :D - 现在,如果我想添加一些例外怎么办?外汇“mht”。或“布拉”。是丹麦语的缩写 - 是否有实现一系列不应大写的例外情况?提前致谢!
【解决方案2】:

我建议使用/([!?.]\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 字母。

【讨论】:

    猜你喜欢
    • 2019-11-11
    • 2018-01-21
    • 2022-07-26
    • 2016-01-18
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多