https://nseg.connpass.com/event/251366/ での発表資料です。

はじめに Unicodeは、世界で使われる文字を利用できるようにすることを目的としています。 そのため、ラテン文字はもちろん、漢字、ハングル、キリル文字、タイ文字、(なんと!)絵文字までもがコード化されています。 一方、JavaScript(ECMAScript2018)ではUnicodeの文字プロパティにマッチングする正規表現の書き方が取り入れられます。 関連:https://github.com/tc39/proposal-regexp-unicode-property-escapes Unicodeの文字プロパティとは、Unicodeの規格で定められた各コードポイントの属性のことです。 まず簡単に見せると、以下のようなことができるようになります。 // 絵文字が含まれているかチェックする /\p{Emoji}/u.test("😃"); // → true /\p{Emoji}/u.
Implementing Regular Expressions Russ Cox rsc@swtch.com This page collects resources about implementing regular expression search efficiently. Articles and Notes “Regular Expression Matching Can Be Simple And Fast” An introduction to using finite automata to implement regular expression matching, and why the standard backtracking implementation is a bad idea. Supporting programs: NFA | DFA | bound
最初に, 皆さんにブラウザーのコンソールで/.*/()を試していただきたい. そして, 他のタブとか色々試して欲しい. どんな文字が返ってきましたか? 多分一意じゃないはず. バラバラ. ワケが分からないよ. そこで, このエントリーを思い出した. (前にも見たことあった...) typeof演算子から学ぶJavaScriptのデータ型の概念と関係する考察のまとめ(id:sandai) 「というわけでデフォルトでexecメソッドが呼び出されるようになっています。」 そうなのか...execなのか. ECMA-262のどこに書いてるのかは分からないけど(←あ...) まあいいや. /.*/.exec()ってなることは分かった. ....function is not a functionの解説はこのエントリーに任せるとして... .execに引数がない場合どうなるのか? 挙動から見てみて明ら
追記:動いていなかった。下のコードは修正済み。 RegExp.parse=function(str){ var [,pattern,flags]=str.split(/^\/|\/(?=[igmy]*$)/); return new RegExp(pattern,flags); } var re=RegExp.parse('/foo\/bar\\\\baz[^/]/ig'); 'foo/Bar\\baz-foo/Bar\\baz-'.match(re);//["foo/Bar\baz-", "foo/Bar\baz-"] 普通にevalする方法だと、正規表現以外も実行されちゃうから駄目。
単純な特定文字列の存在確認をするのに indexOf と正規表現でどれくらい差があるのかなと思って、次のようなコードを書きました。 (function(){ var a = [], n = 10000; for (var i = 0; i < n; i++) { a.push('item:' + i); } var str = a.join('\n'); var s = new Date(); for (var i = 0; i < 3000; i++) { //var m = str.indexOf('item:9999'); // (1) indexOf //var m = /item:9999/.exec(str); // (2) 静的な正規表現 //var m = new RegExp('item:9999').exec(str); // (3) 動的生成の正規表現 //var m
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く