正则表达式匹配包含给定系列字母或数字的所有字符串

时间:2016-09-07 14:20:50

标签: javascript regex

我有一个搜索框,我需要获取此搜索的值,并匹配数据 - *值以搜索值开头的所有DIV。

例:

搜索值:201

匹配data-year="2011"data-year="2012"data-year="2013"

失败data-year="2009"data-year="2001"

这是我到目前为止所提出的:

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

token是搜索框中的动态值。因此我需要使用RegExp

这是有效的,但它匹配包含2或0或1的所有值(据我所知)。所以2009年也是有效的比赛。 :/

我也尝试在开头添加插入符号,以便在世界开始时匹配字符,但显然我在这里遗漏了一些东西:

^\\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/

P.S。我不应该有token在其他角色之前或之后的任何情况,但如果有人知道如何检查这个,那将是很好的。只是在任何像s2015这样的拼写错误的情况下。

3 个答案:

答案 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 :(得分: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>

答案 2 :(得分:0)

您的正则表达式使用的字符类将匹配方括号内的任何字符。删除方括号:

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