2016-09-07 11 views
1

私は検索ボックスを持っており、この検索の値を取得し、data- *値が検索値から始まるすべてのDIVに一致する必要があります。正規表現は、指定された一連の文字または数字を含むすべての文字列と一致します

ケース:

検索値:201

万一試合data-year="2009"data-year="2001"

これは私が出てくるものです:data-year="2011"data-year="2012"data-year="2013"

を故障した場合それでf ar:

\\b(?=\\w*[" + token + "])\\w+\\b 

tokenは、検索ボックスからの動的値です。したがって、私はRegExpを使用する必要があります

これは動作しますが、2または0または1(私の理解のために)を含むすべての値と一致します。そのため、2009年も有効です。 :/

私もちょうど世界の先頭ではなく、明らかに私はここで何かが欠けてるcharacthersを一致させるために先頭にキャレットを追加しよう:

^\\b(?=\\w*[" + token + "])\\w+\\b 

全体のコードは次のとおりです。

var token = '200'; // should fail 
var tokenTwo = '201'; // shoudl work 
var dataAtt = $('#div').data('year').toString(); 
var regexExpression ="^\\b(?=\\w*\\d*[" + token + "])\\w+\\d+\\b"; 
var regEXPRES = "^.*" + token + ".*$"; 
var regex = new RegExp(regexExpression, "i"); 

if(dataAtt.match(regex)){ 
console.log(dataAtt); 

alert('yey!!!'); 
} else { 
    alert('nope!!)') 
} 

、ここJsFiddle http://jsfiddle.net/tk5m8coo/

psです私はtokenが他の文字の前に来るか、またはそれに続くケースを持ってはいけませんが、もし誰かがこれをどうやってチェックするかが大好きであれば。 s2015のようなタイプミスの場合にのみ。

+2

は、この使用して正規表現と周りの混乱をしないでください - あなたの入力から適切な属性セレクタを作成し、それはあなたに関連するすべての要素を取得する1つのjQueryの呼び出しです。 https://api.jquery.com/category/selectors/attribute-selectors/ – CBroe

+0

属性セレクタを使用することに同意しますが、現代のブラウザが行うことができる何かのためにjQueryを使用する必要はありません。 'document.querySelectorAll( '[data-year^=" 201 "]')' – hsan

+0

あなたの答えに感謝します。なぜあなたは属性セレクタを使う方が良いと思いますか? –

答えて

1

問題は、あなたの周りに[...]ラップすることによって、あなたの正規表現を囲むときに文字クラス内検索値を入れているということです。

また、先読みは必要ありません。

var regex = new RegExp("\\b\\w*" + value + "\\w*\\b"); 

検索値が完全な単語内で一致することを確認してください。 (\wには数字も含まれているので、\dを使用する必要はありません)。

全コード:

var value = '20'; //token 
var html = $("#div").html(); //data.() 
var dataAtt = $('#div').data('year').toString(); 

var regex = new RegExp("\\b\\w*" + value + "\\w*\\b"); 

if(dataAtt.match(regex)){ 
    console.log(dataAtt + " matched"); 
} else { 
    console.log('nope') 
} 

Updated JS Fiddle

+1

:)ありがとう!また説明のために。私は実際に\ dを取り除くことができるかどうかと考えていました。 –

+0

多くのdivがある場合は動作しないようです:/ http://jsfiddle.net/tk5m8coo/5/ –

+0

'dataAtt'は' 2015'で、 'foreach'ループ内にあるので正しくありません検索値「200」と「2015」を繰り返し照合 – anubhava

0

それともindexOf()を使用することができます。

var value = '20'; 
 
var html = $("#div").html(); 
 
var dataAtt = $('#div').data('year').toString(); 
 

 

 
if(dataAtt.indexOf(value) >= 0){ 
 
    console.log('yey!!!'); 
 
} else { 
 
    console.log('nein!!)') 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id ="div" data-year="2015"> 
 
    what bozo where 2015 
 
</div>

+0

ありがとう!これもうまくいく –

0

あなたの正規表現は、角カッコ内の任意の文字と一致します文字クラスを使用しています。角括弧を削除します。

^\\b(?=\\w*" + token + ".*)\\w+\\b 
+0

Danに感謝して、あなたのソリューションもかなり素晴らしいです。彼が早かったので私は答えとしてanubhavaのものを受け入れるでしょう –

+0

@GiorgiaSambrotta問題はない、anubhavaのもより完全です。 –

関連する問題