Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Глобальный поиск в регулярных выражениях (https://javascript.ru/forum/misc/4465-globalnyjj-poisk-v-regulyarnykh-vyrazheniyakh.html)

FiMko 23.07.2009 22:53

Глобальный поиск в регулярных выражениях
 
Ребята, привет всем!

Никак не могу догадаться, что делаю не так. Есть код, указанный ниже и входные данные : "qwe\nqwe". В результате выполнения кода получаю только один "qwe". Почему? Ведь я использую глобальный поиск по образцу. Подскажите, пожалуйста.

<script type="text/javascript">
function cleanLog() {
	$('res').update(""); // clear previous data
	regExps = new Array (
		"qwe",
		"abc"
	);
	
	log = $('log').value; // элемент содержит "qwe\nqwe"
	arr = new Array();
	for(var i = 0; i < regExps.length; ++i) {
		res = new RegExp(regExps[i],"gim").exec(log);
		if (res != null)
			arr = arr.concat(res);
	}
	for(var i = 0; i < arr.length; ++i) {
		$('res').insert(arr[i] + "<br>"); // в res только один "qwe"
	}
}
</script>

Riim 24.07.2009 05:58

"abc" замени на "nqwe"

FiMko 24.07.2009 09:48

Цитата:

Сообщение от Riim
"abc" замени на "nqwe"

:blink: причем тут это?

Вот это
regExps = new Array (
        "qwe",
        "abc"
    );

есть набор регулярных выражений. "qwe\nqwe" - есть входная строка, где "\n" подразумевает переход строки...

Помогло, кстати, вот так:
arr = log.match(new RegExp(regexp, "ig"));

С приведенным выше вариантом так пока и не понятно почему не работает.

Kolyaj 24.07.2009 10:18

http://javascript.ru/RegExp/exec

Riim 24.07.2009 10:21

Цитата:

Сообщение от FiMko
причем тут это?

Я думал вы хотите "nqwe" найти.


+--------+------------+---------+-------------------------------------------------
| чей    | возвращает | имя     | описание
| метод  |            |         |
|        |            |         |
|        |            |         |
+--------+------------+---------+-------------------------------------------------
| RegExp | Boolean    | test    | false || true, вместо String.prototype.include()
| String | Integer    | search  | -1 || позиция первого совпадения, вместо String.prototype.indexOf()
| RegExp | Array      | exec    | null || ['совпадение1', 'скобка1', 'скобка2', 'скобка3', ...] : alert( /(\d+).(\d+).(\d+)/.exec('Я родился 15.09.1980') );
| String | Array      | match   | null || IF global THEN ['совпадение1', 'совпадение2', 'совпадение3', ...] ELSE как exec : ['совпадение1', 'скобка1', 'скобка2', 'скобка3', ...]
| String | Array      | split   | [all] || разделение    ( auto global )
| String | String     | replace | без замены || замена
+--------+------------+---------+-------------------------------------------------


Судя по моей чудо-табличке вам нужен match с global .

FiMko 24.07.2009 12:04

Kolyaj, Riim, спасибо за помощь!
Riim, да, табличка действительно неплохая, позаимствовал :write:


Часовой пояс GMT +3, время: 12:03.