2016-10-07 15 views
1

私は、各文の最初の文字をすべて大文字にしたいというテキストエリアを持っています。JavaScriptのピリオド、疑問符、感嘆符の後の最初の文字を大文字にする方法は?

今、私はこれがあります。

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

をそして、これはevt.targetがテキストエリアでAF機能に移行し、機能がkeyUpイベントで呼び出されます。

それはすぐに大文字にしないことを除いて、素晴らしい作品です。 書いた場合:

こんにちは。私はこれのためにいくつかの正規表現が必要です。

"I"は、 "this"の末尾にピリオドを置くときだけ大文字になります。 "。>空白<"または "!>空白<"または "?>空白<"の後に入力するとすぐに "私"を大文字にしたいと思います。

私は多くのものをグーグルで試しましたが、残念ながら、この正規表現のものは私にとっては複雑すぎます。誰でもこれを正確に書いてもらえますか?

+2

たぶん '.replace(/(\)+ S([AZ])/ gで、機能[!?] (m、$ 1、$ 2){return $ 1 + $ 2.UpperCase();}) '? –

+0

私はregexテストのためにwww.regex101.comをお勧めします... –

答えて

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/

+0

素晴らしいソリューション@AntonChukanov!本当にありがとう!! :D - 今、いくつかの例外を追加したいのですが? Fx "mht。"または "bla"デンマーク語の略語です - 大文字にしてはならない例外の配列を実装するにはどうしてですか?前もって感謝します! – RevToid

1

私は/([!?.]\s+)([a-z])/g正規表現を使用することをお勧めして唯一の上層の第2のキャプチャグループに置き換えるコールバック関数に試合を渡す:

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は、!,0をキャプチャします。又は.及び1又は(*+を置き換える、ゼロまたはそれ以上の空白が許可されることに注意してください)より空白
  • ([a-z]) - グループ2は、小文字のASCII文字を捕捉します。
関連する問題