5

次の正規表現があります。

   (electric|acoustic) (guitar|drums)

私が必要とするのは一致することです:

    electric guitar
    electric drums
    acoustic guitar
    acoustic drums
    electric 
    acoustic
    guitar 
    drums

を使ってみた 両方のグループの後、しかしそれはすべてに一致しました。ありがとう!

編集:

<script type="text/javascript">
 var s = "electric drums";

 if(s.match('^(?:electric()|acoustic())? ?(?:guitar()|drums())?(?:\1|\2|\3|\4)$')){
    document.write("match");
 } else {
    document.write("no match"); // returns this
 }
</script> 
4

2 に答える 2

4

1つの方法は、それを詳しく説明することです。

^((electric|acoustic) (guitar|drums)|(electric|acoustic|guitar|drums))$

または(キャプチャ括弧が必要ないため)

^(?:(?:electric|acoustic) (?:guitar|drums)|(?:electric|acoustic|guitar|drums))$

繰り返したくない場合は、トリックを使用することもできます。

^(?:electric()|acoustic())? ?(?:guitar()|drums())?(?:\1|\2|\3|\4)$

(?:\1|\2|\3|\4)、前の空のキャプチャグループ()の少なくとも1つが()試合に参加したことを確認します。

于 2012-12-06T11:10:27.130 に答える
2

次のような先読みベースの正規表現を使用します。

(?=.*?(?:electric|acoustic|guitar|drums))^(?:electric|acoustic|) ?(?:guitar|drums|)$

ライブデモ

于 2012-12-06T11:12:44.317 に答える