LoginSignup
0
0

More than 5 years have passed since last update.

"myCAMELCase" から "my", "CAMEL", "Case" を抽出する正規表現

Last updated at Posted at 2018-11-23

Elasticsearch の Pattern Capture Token Filter で欲しくなったので書いた。

TL;DR

/([a-z]+)|([A-Z][a-z]+)|([A-Z]+)(?=[A-Z])/g

(A-z の範囲外を扱う場合は [A-Z], [a-z] の代わりに \p{Lu} (対応する小文字がある大文字)、 \p{Ll} (対応する大文字がある小文字)を使うほうが適切なケースもある)

解説

/
  ([a-z]+)       # 小文字の連続 (my)
| ([A-Z][a-z]+)  # 大文字に続く小文字の連続 (Case)
| ([[A-Z]+)      # 大文字に続く大文字の連続 (CAMEL)
  (?=[A-Z])      #   最後の連続する大文字はマッチせず、また消費しない(先読み)
/g
  • /([a-z]+)|([A-Z][a-z]+)|[A-Z]+/g だと、"MyAPIDocs" からは "My", "APID", "ocs" のような結果が得られてしまう(Docs の D まで食われてしまう)
  • そこで、大文字の連続のキャプチャグループ ([[A-Z]+) の後ろに [A-Z] をひとつだけ置いておくことで最後の大文字(上の例ならば Docs の D)にマッチさせず、またそれを肯定先読み (positive lookahead) (?=) にしておくことで、消費もさせない
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0