oguna / jsmigemo

migemo on javascript

Home Page:https://oguna.github.io/jsmigemo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

()が対にならないパターンが存在する

atusy opened this issue · comments

commented

iに対して出力された正規表現を用い、 grepコマンドを実行してみたところ、grep: Unmatched ) or \)というエラーが出ました。
数えてみたところ、(が33個、)が34個と、確かに数が対応していないようです。

echo 'i' | grep '([1SYiΕΗΙεηιй→⇒∈∋∞∩∫∬≒≠≦≧⊂⊃▼いゐイ一乙乾云五井些亥今以伊伍位何佚依倚偉偽傷僞允入円凍凧出到功労勇動勢勤勲勳医卑印厭厳去古可吋否命咽員唯啀善営嘶噫囗因囲圍圦在坐域堙堰壱壹夢夷好如妹委姨姻威婬嫌孰家容寅射将尉尹尿居岩巌巖已市帷幃幼幾庵廴弄弋弌弑引弥弩彌彙彜彝彩往徒忌忙応忽忿怒怡急恚息悼惟愈意愛愴慇慈慯慰憇憤憩懐懿戌戒戦戰戴抱挑挿揖斎斐易暇曰未杁李板柞格桴棘椅樹櫟歪殞殷毓毬氤氷汝池沙泉洟活淫淹渭湮湶溢漁潔炒為烈焉煎熨熬熱營燠燻爲牲犠犧犬狗猗猪猯率甃甍生畏異疣病痍痛痿癒的矣矮石砂碇碑磐磯礇礎祈祝祷禾移稚稲稻窟筏答粋粥粹糸絲維綺緒緯縛縷聊聿肄肆肬育胃胆胤臀至致良色艷芋苛苟苡苺范茨茵荊莓莞菴萎著蔚蔭薯藷蚓蝗行衣要言訝詑詒誘誡諌諍諫諱謂警豕貸貽賤贅贇躄軍軼逝逶逸遑違遺郁鄙酳醫鈑鈩鋳錨鎔鎰鐓鑄鑪閾院陰隕隠隱雖雷電霆霪霹韋音韵韻頂頌頤飮飯飲饐鬻魚鮪鯆鰄鰍鰛鰮鰯鱗鴪鵤鼬鼾1=Iiイ¥]|\(concat "I\\057O("\)|ポート"\))|5[つ日]|<==>|Diapensiales|Eメール|G(inkgopsida|lumiflorae|raminales)|I([Pnr]|C(カード|タグ|チップ)|D(E(ケーブル|コントローラ|デバイス|ドライブ)|カード)|RQ|S(O|Aバス|BN(コード|番号))|T(システム|バブル)|daho|llinois|owa|カップ|ターン)|Juncales|Najadales|P(lumbaginales|oales)|Urticales|ならば|ア(イ([スソダドナムラル]|ア[ムン]|オ([ナワン]|ダイン|ニアン|ライト)|コ(ン|ニファイ)|ザック|シ(ー|ング)|テ(ム|ィー)|デ(ア|ィ[アー]|ンティ(ティ|ファイ))|ネス|バンホー|ビー|ブス|ベックス|ボリー|ポッド|マック|リ(ス|ッシュ|ーン)|ロ(ン|ニー)|ワイバンク|ヴ([ィスズ]|ァン|ォリー)|・(アム|ビー・エム|ラブ・))|ン(デパンダン|フォル(マティーク|メル)|プロンプ(チュ|テュ))|ー(ビン|ヴィン))|ヤン|ヨ(アン|シフ|ード)|不([可如足]|充分)|交喙|公孫樹|具体化|刺[草青]|十六夜|即興曲|和泉|埋け[火炭]|夜来香|字下げ|完全|寝穢|導入|小魚|巫子|帰納法|常春藤|影青|従[兄妹姉弟]|必要十分条件|悪戯|情報|惡戲|所謂|拠所|指宿|整数|文身|斑鳩|檪本|気吹|況んや|海[参豚]|湯文字|潮来|灼然|烏賊|無(効な|花果)|牛膝|玉筋魚|甚振|田舎|睦月|硫黄|礒[山田]|祖谷|神巫|稜威|細小魚|経緯|縊[死殺首]|膝行|英(蘭|吉利)|蕁麻|藺草|蝟[縮集]|西表|許[婚嫁]|誤った|識別子|逐次型|郎[女子]|都方流|銀杏|項目|鯨魚|鳶尾|鴨脚樹|鶏魚|鸚哥|5[つ日]|E(AST|VE))'
commented

ご報告ありがとうございます。

migemoは正規表現を出力するため、grepの引数として使う際は、-Eオプションを付けてください。

echo 'i' | grep -E '([1SYiΕΗΙεηιй→⇒∈∋∞∩∫∬≒≠≦略])'

上のコマンドを実行すると、iがハイライトされて出力されます。

さて、()の数が一致しないのは、エスケープされた(が集約処理により一部が削除されたためです。
iをmigemoで処理すると、(concat "I\057O")(concat "I\057Oポート")がヒットするような正規表現が出力されます。
この2単語の先頭の共通部分(concat "I\057Oは集約され1回しか出力されません。
一方、共通部分より後ろの部分である")"ポート")はOR演算子|で結合され、それぞれ1回づつ出力されます。
結果、2単語にヒットする正規表現は次のようになります。

\(concat "I\\057O("\)|ポート"\))

()の登場数は異なりますが、正しい出力結果です。

commented

なるほどありがとうございます。
正規表現エンジンによらない問題と誤解しておりました。
実際にはVimで利用した際に問題が生じておりました。

- \m(concat "I\\057O\%("\)\|ポート"\)\)
+ \m(concat "I\\057O\(")\|ポート")\)

となっていればよさそうですね。

下記のVimプラグインを使った結果なので、プラグイン側でなんとかなるか聞いてみようと思います。

https://github.com/lambdalisue/kensaku.vim

commented

生成された正規表現を、こちらのように修正しても動作しました。

- \(concat "I\\057O\%("\)\|ポート"\)\)
+ \(concat "I\\057O\%(")\|ポート")\)

#21 と同じく、エスケープしてはいけない文字である)をエスケープしたことが原因のようです。
#21 と一緒に、何らかの修正をしていきたいと思います。

commented

@atusy
vimモードで出力する場合、()をエスケープしないように修正しました。
node .\bin\jsmigemo-cli.mjs -v -n -w i の出力結果をvimの検索に入力しても動作しました。
問題が解決したかご確認をお願いします。

commented

こちら、正常動作確認できました。どうもありがとうございます!