2012-08-23 38 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

這個解決方案還涉及一個內部循環,它使用您的函數作爲回調。 –

相關問題