2012-02-09 3 views
4

Можно создать дубликат:
Regex exec only returning first matchметод JavaScript RegExp Exec() возвращает только один элемент

"a1b2c3d".replace(/[0-9]/g,"x") 

возвращается "axbxdxd", как и ожидалось.

/[0-9]/g.exec("a1b2c3d") 

однако только возвращает массив, содержащий один элемент: ["1"]. Разве он не должен возвращать все матчи?

Заранее благодарен!

+0

Похожий вопрос здесь: http://stackoverflow.com/questions/3920038/regexp-exec-not-returning-global-results – diaho

+0

хорошо, спасибо, я не нашел, что ответ – muffel

+1

@diaho: Это заметно другой вопрос. –

ответ

5

Нет, вы должны вызвать exec несколько раз:

var re = /[0-9]/g; 
var input = "a1b2c3d"; 
var myArray; 
while ((myArray = re.exec(input)) != null) 
{ 
    var msg = "Found " + myArray[0] + ". "; 
    print(msg); 
} 

Edit: Mozilla Developer Network page on exec имеет гораздо больше, чтобы сказать об этой функции. Вот где я привел пример и изменил его для вашего вопроса.

Редактировать 2: Я изменил приведенный выше код, чтобы он не был бесконечным циклом. :-)

+0

К сожалению, приведенный вами пример не работает - его бесконечный цикл возвращает только «1». Есть идеи? – muffel

+1

@muffel: Попробуйте переместить регулярное выражение в свою переменную? 'var re = /[0-9]/g;'... и затем использовать это в цикле' while': 'while ((myArray = re.exec (" a1b2c3d "))! = null)'? – CanSpice

+1

Ну, это было аккуратно. Запуск опубликованного кода в Chrome создавал бесконечный цикл окон страницы печати. Пришлось убить его и вернуться. :-) Кстати, да, сначала поставьте его в переменную. В противном случае вы воссоздаете новое регулярное выражение для каждой итерации. – Wiseguy

Смежные вопросы