2017-04-17 3 views
1

に一致する私は両方の文字列を共有する10を通って、私は3の長さの部分文字列を持っている正規表現重複のため、オペレータが

chriscattano 
christiancattano 

私の名前の長さを変化させている2つの文字列を持っている

(chr)(hri)(ris)(cat)(att)(tta)(tan)(ano)(chri)(hris)(catt)(atta)(ttan)(tano)(chris)(catta)(attan)(ttano)(cattan)(attano)(cattano) 

私はこれを正規表現の検索に入れようとしています。これは、単語chriscattanoにうまく一致します。 .replaceと一致結果にをsassクラスで適用します。

私はあることを私の正規表現をフォーマットする場合:

/(chr)|(hri)|(ris)|(cat)|(att)|(tta)|(tan)|(ano)|(chri)|(hris)|(catt)|(atta)|(ttan)|(tano)|(chris)|(catta)|(attan)|(ttano)|(cattan)|(attano)|(cattano)/g 

私は相互chrcattanに合致するように管理しますが、私はchriscattanoを強調表示する方法を見つけ出すことはできません。 isoが見つかりません。

この例は、機能をテストして完成させるために私の名前を使用しているため、大幅に変更することができます。それは最終的に電子メールアドレス、名前、およびアドレスに使用されます。だからキャプチャグループの順番を変更すると(これがこれを解決できるかどうかは)解決策ではなく、より動的にするとキャプチャグループが正規表現オブジェクトに入れられるときの順序をほとんど制御しなくなります。メソッドとしてパラメータとして供給される。.replace()メソッド。

ここに私が必要とするマッチを強調するためにさまざまなことを試してきた正規表現があります。うまくいけば、誰かがそれを動かすことができますか?

http://www.regexpal.com/?fam=97413

+0

最終目標は何ですか? 2つの文字列の共通部分文字列を強調表示するコードを記述しようとしていますか?私は正規表現が正しい解決策ではないと感じています。 –

+0

@Jordanはい、2つの文字列が与えられたとき、私は3と10の間のすべての共有部分文字列を抽出するコードを持っています。これらの部分文字列は、.replace()メソッドのパラメータとして使用されるregexオブジェクト広告。 .replace()メソッドは、マッチした単語をバックグラウンドカラーを指定するsassクラスを含むスパンに置き換えます。これは、h.replace(regexObj、 ' $ {regexObj}')のようなものです。 – Chris

+0

注文には問題がありますか? 'chriscattano'と' cattanoXYZchris'はどうなるでしょうか?一般的な部分文字列を列挙するには、[多くの既存の研究(https://www.google.com/search?q=algorithm+find+all+common+substrings)があります。あなたは車輪を再発明する魅力的な理由がありますか? –

答えて

1

あなたは最長の選択肢が最初にテストされていることを確認し、その後、.join("|")とパターンにそれらを結合する降順に長さによって、あなたの配列内のアイテムをソートする必要があります。

これは、JSなどのNFA正規表現では、見つかった最初の代替案が正規表現エンジンの処理を停止するためです。 Remember That The Regex Engine Is Eagerで詳しく読むことができます。

関連する問題