2016-09-07 55 views
1

我有一个搜索框,我需要抓取这个搜索的值,并匹配所有的DIV,其中data- *值是以搜索值开始的。正则表达式匹配包含给定的一系列字母或数字的所有字符串

案例:

搜索值:201

应该比赛data-year="2011"data-year="2012"data-year="2013"

是否应失败data-year="2009"data-year="2001"

这就是我想出与如此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

不要乱用这个使用正则表达式 - 从您的输入创建适当的属性选择器,然后它是一个单一的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

谢谢丹,你的解决方案也很好。我会接受anubhava的回答,因为他更快 –

+0

@GiorgiaSambrotta没问题,anubhava的也更完整。 –

相关问题