2012-03-31 11 views

उत्तर

6

आप can useRegExp#exec विधि कई बार:

var regex = /a/g; 
var str = "abcdab"; 

var result = []; 
var match; 
while (match = regex.exec(str)) 
    result.push(match.index); 

alert(result); // => [0, 4] 

Helper function: कार्य करने के लिए

var result = []; 
"abcdab".replace(/(a)/g, function (a, b, index) { 
    result.push(index); 
}); 
result; // [0, 4] 

तर्क हैं:

function getMatchIndices(regex, str) { 
    var result = []; 
    var match; 
    regex = new RegExp(regex); 
    while (match = regex.exec(str)) 
     result.push(match.index); 
    return result; 
} 

alert(getMatchIndices(/a/g, "abcdab")); 
+0

मैं रेगुलर एक्सप्रेशन कार्यकारी विधि की तरह। '.replace()' फ़ंक्शन के चालाक उपयोग के लिए – kennebec

5

आप इस्तेमाल कर सकते हैं/replace function दुरुपयोग निम्नानुसार है:

function replacer(match, p1, p2, p3, offset, string) { 
    // p1 is nondigits, p2 digits, and p3 non-alphanumerics 
    return [p1, p2, p3].join(' - '); 
} 
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer); 
console.log(newString); // abc - 12345 - #$*% 
+0

+1। – jfriend00

0

आप इस तरह सभी मैच अनुक्रमित प्राप्त कर सकते हैं:

var str = "abcdab"; 
var re = /a/g; 
var matches; 
var indexes = []; 
while (matches = re.exec(str)) { 
    indexes.push(matches.index); 
} 
// indexes here contains all the matching index values 

डेमो यहाँ कार्य करना: http://jsfiddle.net/jfriend00/r6JTJ/

+0

डाउनवोट क्यों? – jfriend00

1

एक गैर regex किस्म:

var str = "abcdabcdabcd", 
    char = 'a', 
    curr = 0, 
    positions = []; 

while (str.length > curr) { 
    if (str[curr] == char) { 
     positions.push(curr); 
    } 
    curr++; 
} 

console.log(positions); 

http://jsfiddle.net/userdude/HUm8d/

2

आप केवल सरल वर्ण, या चरित्र दृश्यों को खोजने के लिए चाहते हैं, आप indexOf[MDN] उपयोग कर सकते हैं:

var haystack = "abcdab", 
    needle = "a" 
    index = -1, 
    result = []; 

while((index = haystack.indexOf(needle, index + 1)) > -1) { 
    result.push(index); 
} 
+0

यदि कोई केवल एक ही चरित्र की घटनाओं की तलाश में है, तो यह करने का एक बहुत ही आसान तरीका होगा और शायद रेगेक्स से बेहतर प्रदर्शन करेगा। – jfriend00

संबंधित मुद्दे