2016-05-06 9 views
1

これは私が持っている正規表現です:だからシナリオはmodSearchStringが文字/単語の文字列が含まれていることです正規表現:ワード境界にあるプラス記号を追加

new RegExp("\\b" + synonym.toLowerCase() + "\\b", "g").test(modSearchString.toLowerCase())

。 modSearchStringに同義語が含まれているかどうか、そしてそれが何かをするかどうかを調べています。今、それは本当にうまくいっています。ただし、シノニムにプラス記号が含まれている場合は機能しないようです。これらの同義語のほとんどにプラス記号はありませんが、いくつかの可能性があります。プラス記号もどうやって説明できますか?

EDIT

modSearchStringでフレーズは、渡された同義語で、正確に一致するように、私はそれをしたいです。したがって、シノニムが "ThisPass +"で、modSearchstring = 'Test for ThisPass++"の場合、それは失敗するはずです。ただし、modSearchstring = 'Test for ThisPass+"の場合は合格になります。 シノニムが "ThisPass"の場合は、同じことが必要です。 modSearchstring = 'Test for ThisPass"の場合は合格し、modSearchstring = 'Test for ThisPass+"の場合は失敗します。

最初の正規表現は、検索文字列にその同義語が含まれているとうまく機能しています。しかし、それは単語の文字であれば動作します。シノニムには+記号が含まれている可能性があるため、おそらくうまく機能しません。

+1

あなたはプラス記号をエスケープする必要があります。ここではトップの答えをチェックしてください:http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript – dan08

+0

'+' is単語の文字ではないので、その前に文字/数字/アンダースコアがあれば '\ b \ +'と一致しますが、スペースやカンマなどは存在しません。開始時にプラス記号がある場合は '\ B \ +'、最後にプラス記号がある場合は '\ + \ B'をチェックしたいかもしれません。 –

+0

「同義語」が終わるかプラス記号で始まる場合は、単語境界を使用することはできません。 '(?:^ | \ W)'と '(?:$ | \ W)'を使用してください。 –

答えて

0

あなたがregex demoはここでチェックすることができ

new RegExp("(?:^|\\s)" + synonym + "(?=\\s|$)") 

を必要とするようです。

(?:^|\s)

は単なる文字列の先頭(^)または空白(\s)、及びだけ空白がある場合(これはゼロ幅アサーションのように消費されません)チェックする後続先読みのいずれかに一致する最初のグループまたは文字列の最後($)。

0

あなただけの1つの文字列は、あなたがこれを行うことができ、他のが含まれているかどうかを確認する必要がある場合:

var modSearchString = "foo bar"; 
var synonym = "bar"; 

if(modSearchString.indexOf(synonym) > -1){ 
    //modSearchString contains synonym 
}else{ 
    //modSearchString does not contain synonym 
} 
関連する問題