LoginSignup
34
31

More than 5 years have passed since last update.

複雑な正規表現を分かりやすくするライブラリ『VerbalExpressions』

Last updated at Posted at 2014-09-30

正規表現難しい!
謎の記号が並んでるし, いざ書いてもうまく判定できてるかよくわからない.
もうプログラムの勉強なんかしたくないし, 生きているのがツライよぉ.

そんな人にもってこいなのが, 今回紹介する『VerbalExpressions』です!!

プロジェクトスタート時から watch していて,
アプローチとして面白いなと思ったので紹介します.

VerbalExpressions って?

これはタイトルの通り複雑な正規表現を分かりやすくしてくれるライブラリです.

コードは, 普通に正規表現書くよりも長くなっちゃいますが,
英文法に近いカタチで書くことができます.

example
var tester = VerEx().startOfLine().then( "a" ).maybe( "b" );

var message = "abc";
console.log(tester.test(message)); // true

runstant で触れるようにテンプレート作りました. -> こちら

ちなみに今回は js 版の紹介ですが他の言語にも対応してます!

  • Ruby
  • C#
  • Python
  • Java
  • Groovy
  • PHP
  • Haskell
  • C++
  • Objective-C

使い方

github の JSVerbalExpressions にある VerbalExpressions.js を読み込むだけです.

html
<script type="text/javascript" src="VerbalExpressions.js"></script>

サンプルー♪

置換してみる

デモはこちら

var message = "Hello, world!";

// JSVerbalExpressions
console.log( VerEx().then( "world" ).test(message) ); // true
console.log( VerEx().startOfLine().then( "world" ).test(message) ); // false
console.log( VerEx().then( "hoge" ).test(message) ); // false

// RegExp
console.log( /world/.test(message) ); // true
console.log( /$world/.test(message) ); // false
console.log( /hoge/.test(message) ); // false

URL をチェック

デモはこちら

正規表現
/^(?:http)(?:s)?(?:\:\/\/)(?:www\.)?(?:[^\ ]*)$/gm
VerbalExpressions
var tester = VerEx()
            .startOfLine()
            .then( "http" )
            .maybe( "s" )
            .then( "://" )
            .maybe( "www." )
            .anythingBut( " " )
            .endOfLine();

どっちを使うべき?

if (速度が重視されない && コードの修正頻度が多い) {
    VerbalExpressions を使うのもありかも!!
}
else {
    正規表現を使うべき
}

って感じですかね.
やはり速度は圧倒的に正規表現のほうが早い(はず)です.

ただ, VerbalExpressions だと後々他の人がコードをイジる際に正規表現知らない人でも
何やっているのか分かりやすいので使うのを検討するのもありかなと思います.

とはいえ正規表現は基礎中の基礎!
実装だけでなく, 検索や置換にも使うとても汎用的なスキルです.
しっかりと学んでおきましょう!!

って真面目なこと言って終わりますノシ

34
31
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
34
31