2016-04-14 18 views
0

文字の文字とダッシュ記号( - )のみを含む単語の正規表現を作成する必要があります。連続して繰り返すことはできません(例: - )。ここに私の正規表現関数があります:文字のみを含む文字列をテストする方法とダッシュ( - )[javascript]

var regex = new RegExp(/(\w*\-{0,1})*/); 

この関数は次のように単語のために働く必要があります:home-doグラム、あるいは何かのように、home-dog-birdなくhome--dogのようなもののために。これをどうすればテストできますか?

+2

あなたの質問を理解することは困難であるとして、あなたはテキストの例を与えることができます。 – Pogrindis

+0

最も簡単なのは、後続/先行ハイフン「/^- ?\ w +(?: - \ w +)* - ?$/' –

+0

を許可するために、'/^ \ w +(?: - \ w +単一の ' - 'は有効ですか?空の言葉はどうですか? – user0815

答えて

0

逆方向に進む(前方に進むのではなく後方に進む)と考えるならば、それぞれの一致が1つ以上の単語文字で始まり、その後に0個以上の単一ダッシュ、単語のペアが続くことを主張する正規表現を作ることができます

https://regex101.com/r/xT7aT5/2

​​

これはしかし最善のアプローチであるかどうかわかりません。私はPyの答えが最高の気分が好きです。

+0

これは改行された単語では機能しますが、テキストブロックでは機能しません。 *をaに変更すると、^と$を削除できます。 https://regex101.com/r/hU0xH7/1 –

+0

@MarkEvaulコメントをいただきありがとうございます。 '^'と '$'はそこにありますので、 'm'フラグを使ってこれをより便利にテストできます。 regex101のテストケースの区切りリストを改行することができます。本番環境では、これをテキストブロックに対して実行しようとしている場合は、削除する必要があります。 –

+0

右ですが、他のものを変更せずに^と$を削除すると、単語の誤認がまったくなくなります。言い換えれば、これはテストサイトに基づいて正しいと思うかもしれませんが、それを移動して^と$を削除してテキストブロック内で見つけた場合は、 。 –

-1

はあなたが先に否定的な外観を使用していることを行うことができます /^([^-]*-{0,1}[^-]*)$/

+0

これは 'home-dog-bird'と一致しません。 – user0815

+0

元の質問にその要件がありません –

+0

まず、それは私の質問ではありません。第二に、家庭犬鳥は質問の最初の改訂以来の要件である。 – user0815

3

この正規表現を試してみてください。これは英数字のみと、それが別の-が続いていない場合にのみ、-が含まれている何かを一致さは何

var regex=new RegExp(/^(\w|-(?!-))+$/); 

javascriptの正規表現の詳細については、https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressionsを参照してください。

+1

誰かが結果を再生したい場合は、[regex101 link](https://regex101.com/r/eR6uY0/1)にすばやく入力してください。 –

0

先読みなしもう1:単一のダッシュとの単語を単語とオプションを探し

/^(-?\w+)*-?$/ 
0

別の解決策。

function match(s) { 
 
    return !!s.match(/^\w+(\-\w+)*$/g); 
 
} 
 

 
document.write(match('dog') + '<br>'); 
 
document.write(match('dog-cat') + '<br>'); 
 
document.write(match('dog-cat-fish') + '<br>'); 
 
document.write(match('dog-cat--fish') + '<br>');

0

また、これを試みることができる:

var regex = new RegExp(/^(\w*(\-\w)\w*)*$/); 
関連する問題