2012-08-23 55 views
0

所以我对正则表达式相当陌生。任何帮助表示赞赏。javascript正则表达式:匹配只有一些字母的所有单词

我有以下格式的字符串:给定的只是一些输入

var str: ".item-61347 .item-79134 .item-79465 .item-96464" 

我希望能够提取所有匹配的话,。例如:

input: 13 --> .item-61347 .item-79134 
input: 79 --> .item-79134 .item-79465 
input: 96464 --> .item-96464 

的投入将是一个字符串变量,所以我非常希望能够做这样的事情:

str.match(<regexp with string containing input>) 

回答

2

如何:

var testRegex, 
    testInputs = [13, 79, 96464]; 
var testStr = '.item-61347 .item-79134 .item-79465 .item-96464'; 
for (var i = 0, l = testInputs.length; i < l; ++i) { 
    testRegex = new RegExp('[.]item-(?=[0-9]*' + testInputs[i] + ')[0-9]+', 'ig'); 
    console.log(testStr.match(testRegex)); 
} 

重点是在你的正则表达式中使用lookahead来同时检查你输入的数字子模式

+0

哇,这是真棒!!!!如果我能给你+100我会的。我在工作中处于严格的最后期限,不得不与jQuery同位素库一起使用。再次感谢!上帝保佑 – victormejia

+0

对于输入'13',这不符合'.item-633413'。您可能需要将'[0-9] +'替换为'[0-9] *'。并且制作第一个'[0-9] *''不确定',如'[0-9] *?'。你怎么看? – Kash

+0

@Kash你真的检查你的例子吗?这是向前看,不是简单的匹配;正则表达式中的'OR'。 – raina77ow

4

看起来不像有需要的正则表达式都:

var items = ".item-61347 .item-79134 .item-79465 .item-96464".split(" "); 

var itemsThatMatch13 = items.filter(function(v) { 
    return v.indexOf("13") > 0; 
}); 

//[".item-61347", ".item-79134"] 
+0

这也可以。很优雅的解决方案 – victormejia

+0

@victorswx btw,如果你需要IE <9的支持,你可以在这里获得代码:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter#Compatibility – Esailija

+0

这个解决方案还涉及一个内部循环,它使用您的函数作为回调。 –

相关问题