2009-07-27 6 views
2

特定の文章構造に一致する正規表現(Javascriptで)を作成する必要があります。私の場合、それは "Course ### day ###"です。###は任意の1から3桁の数字です。さらに、 "day"の代わりに "week"にすることもできるので、 "Course ### week ###"も有効です。Javascriptの正規表現で文全体をどのように一致させるのですか?

これまでのところ、私が作ってみた:

var regTest=/^(Course) \d{1,3} (day)|(week) \d{1,3}$/ 

問題は、この式は、私が欲しいものですが、それはまた、9日、」コースにマッチします「コース9日1」を、一致していることです1は07/01/09に予定されています。言い換えれば

、次は0の値を返します。

"Course 9 day 1".search(regTest) 

をしかし、この1つはまた、0を返します。

"Course 9 day 1 scheduled on 07/01/09".search(regTest) 

私は0を返すように最初のテストをしたいが、私はしたいです-1を返す2番目のもの。 ###翌日/週まで唯一一致する表現が必要です。その時点でどうやって止めるのですか?

+0

文字列から何かを抽出しようとしていますか、文字列がパターンと一致するかどうかを検証しようとしていますか? – Prestaul

答えて

0

グループの追加レベルが必要とされている:パイプが内側にある場合

/^(Course) \d{1,3} (day|week) \d{1,3}$/ 

var regTest=/^(Course) \d{1,3} ((day)|(week)) \d{1,3}$/ 
3

あなたは一日と一週間の間に括弧の中にOR(パイプ)を移動する必要がありますparensはその日の "day"または "week"と一致します。パイプが括弧の中にない場合は、式の前半(つまり「Course ### day」)または式の後半(「week ###」)と一致します。また

、あなただけの文字列は、あなたではなく「検索」よりも、「テスト」を使用することができるパターンと一致することを検証しようとしている場合:

if(/^(Course) \d{1,3} (day|week) \d{1,3}$/.test(someString)) { 
    // it matches! 
} 
+0

キャッチをありがとう! –

0

あなたは

var regTest=/^(Course) \d{1,3} (day|week) \d{1,3}$/ 

をしたい(ことに注意してください(day)|(week)(day|week)に変更されました)。あなたの古い正規表現は実際には2つで、|と結合しました。あなたは、参照してください| (最低限の)厳密に拘束力のある正規表現メタキャラクタの1つで、ab|cdは "ab"と "cd"と一致しますが、 "abd"や "acd"とは一致しません。

0

あなたはすなわち

var regTest=/^(Course) \d{1,3} ((day)|(week)) \d{1,3}$/ 

あなたが実際にところで

var regTest=/^Course \d{1,3} (day|week) \d{1,3}$/ 

に声明を減らすことができます右、あなたは括弧ブロックに(day)|(week)にチェックを入れる必要があることを除いてすべてを持っている、私は知っていますなぜあなたはCourseのまわりのカッコを必要としません。私はあなたがなぜそれらを必要としないのかわからない。dayweek。私がsedへのアクセス権を持っていれば、それがどのように扱われているのかを知りたいと思っています。((day)|(week))(day|week)

関連する問題