正規表現難しい!
謎の記号が並んでるし, いざ書いてもうまく判定できてるかよくわからない.
もうプログラムの勉強なんかしたくないし, 生きているのがツライよぉ.
そんな人にもってこいなのが, 今回紹介する『VerbalExpressions』です!!
プロジェクトスタート時から watch していて,
アプローチとして面白いなと思ったので紹介します.
VerbalExpressions って?
これはタイトルの通り複雑な正規表現を分かりやすくしてくれるライブラリです.
コードは, 普通に正規表現書くよりも長くなっちゃいますが,
英文法に近いカタチで書くことができます.
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
を読み込むだけです.
<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
var tester = VerEx()
.startOfLine()
.then( "http" )
.maybe( "s" )
.then( "://" )
.maybe( "www." )
.anythingBut( " " )
.endOfLine();
どっちを使うべき?
if (速度が重視されない && コードの修正頻度が多い) {
VerbalExpressions を使うのもありかも!!
}
else {
正規表現を使うべき
}
って感じですかね.
やはり速度は圧倒的に正規表現のほうが早い(はず)です.
ただ, VerbalExpressions だと後々他の人がコードをイジる際に正規表現知らない人でも
何やっているのか分かりやすいので使うのを検討するのもありかなと思います.
とはいえ正規表現は基礎中の基礎!
実装だけでなく, 検索や置換にも使うとても汎用的なスキルです.
しっかりと学んでおきましょう!!
って真面目なこと言って終わりますノシ