asearchという文字列が似ているかどうか判定するrubygemがある。
増井先生が作ったもので、gyazzのページ名サジェストなどに使われている。

それをnodeに移植した。
https://npmjs.org/package/asearch
https://github.com/shokai/node-asearch


特徴

  • はやい
  • byte列を比較しているだけ
  • 結果はtrue/falseで返ってくる
  • あいまい度は指定できる(0〜3まで)
  • 他のライブラリに依存していない、pure javascript
たぶんブラウザでも動くのであとで試してみる。


インストール


npm install asearch


使い方

Asearch = require 'asearch'

a = new Asearch 'abcde'

console.log a.match 'abcde' # => true
console.log a.match 'AbCdE' # => true
console.log a.match 'abcd' # => false
console.log a.match 'abcd', 1 # => true
console.log a.match 'ab de', 1 # => true
console.log a.match 'abe', 1 # => false
console.log a.match 'abe', 2 # => true

typoを判定
a = new Asearch 'cheese burger'

console.log a.match 'cheese burger' # => true
console.log a.match 'chess burger', 2 # => true
console.log a.match 'chess', 2 # => false


2バイト文字もok
a = new Asearch '漢字文字列'

console.log a.match '漢字文字列' # => true
console.log a.match '漢字文字烈' # => false
console.log a.match '漢字文字烈', 2 # => true

このように手っ取り早く2つの文字列が似ているかどうか判定できて便利。


Nodeでビット演算

RubyからJavaScriptへ移植するにあたってビット演算がちょっと違った。

右シフト >> はjavascriptでは符号なし右シフト >>> にしないと符号が反転してしまう事がある。10分ぐらい気付かなかった。
|= とか >>>= とかも使える。
coffee-scriptだとさらに0b1010のような2進数記法も使えて便利。

RubyのString#unpackはNodeにもjspackという実装があるが、2byte文字に対応していなかったので自前実装した。