LINUX.ORG.RU

Как работает метод test в JS в цикле?

 ,


0

1

Я ващ не могу понять, что тут происходит.

re=/\w/g
s="*a*a*a*a*"
for(i=0; i<=s.length; i++){
console.log(re.test(s), re.lastIndex)
}
 
//  true 2
//  true 4
//  true 6
//  true 8
//  false 0
//  true 2
//  true 4
//  true 6
//  true 8
//  false 0
Почему он 1)скачет через символ, 2)не выводит false? 3)проходит дважды?

А вот так:

re=/\w/g
s="****"
for(i=0; i<=10; i++){
console.log(re.test(s), re.lastIndex)
}

// ::: false 0
// ::: false 0
// ::: false 0
// ::: false 0
// ::: false 0
// ::: false 0
// ::: false 0
// ::: false 0
// ::: false 0
// ::: false 0
// ::: false 0
Он ваще за пределы 0 не выходит. Ваще не понимаю.

Объясните логику его работы, плз.

UPD Пораскинул мозгами, и так понял, что он тупо ищет первое вхождение возвратившее true и выходит, а следующая итерация начинается с последнго индекса. То есть, он проходит строку заново на каждой итерации. Зачем это нужно? Каково применение в реальных задачах?



Последнее исправление: terminator-101 (всего исправлений: 2)

Ответ на: комментарий от ritsufag

re=/\w/g
s="s**s**"
while(1){
tmp=re.test(s)
if(!tmp) break
console.log("I'm running: ",tmp, re.lastIndex-1)
}

//  I'm running:  true 0
//  I'm running:  true 3

Вот тут, например, как видим, он не возвращает false, на звездочках

terminator-101
() автор топика

он тупо ищет первое вхождение возвратившее true и выходит, а следующая итерация начинается с последнго индекса. То есть, он проходит строку заново на каждой итерации.

Почему же «заново»? С последнего найденного вхождения.

proud_anon ★★★★★
()
Ответ на: комментарий от terminator-101

Всё он возвращает.
Ты там ничего не долбишь?

ritsufag ★★★★★
()
var re = /\w/g;
var s = "*a*a*a*a*";
for(var i = 0; i < s.length; i++) {
    console.log(re.test(s[i]), i, s[i]);
}
kiotoze ★★★★
()
Ответ на: комментарий от terminator-101

Конечно не возвращает, потому что звёздочки не попадают под RegExp.
Кароч всё ясно, апельсинус и дальше будет продолжать постить тупняк. Остаётся только добавить в список.

ritsufag ★★★★★
()
Ответ на: комментарий от ritsufag

Ясен пень, что не попадают, но я тебе второй раз повторяю, что test возвращает false в этом случае.

terminator-101
() автор топика

А, понял, он на каждой итерации возвращает значение re.test(оставшаяся подстрока).

terminator-101
() автор топика
Ответ на: комментарий от ritsufag

Конечно не возвращает, потому что звёздочки не попадают под RegExp.

А ты, кстати, ни хера не понял. Он не поэтому false не возвращает, а потому что оставшаяся подстрока дает истину. Кто меньше всего понимает, тот больше всех визжит, как всегда

terminator-101
() автор топика
Ответ на: комментарий от terminator-101

Он не поэтому false не возвращает, а потому что оставшаяся подстрока дает истину.
Кто меньше всего понимает, тот больше всех визжит, как всегда

Вот уж действительно. На протяжении треда люди тебе всё разжевали, а ты и не понял нихера.

ritsufag ★★★★★
()
Ответ на: комментарий от ritsufag

Че я не понял? Я все понял, абсолютно. И не потому что разжевали, потому что не было никакой конкретики по вопросу (мож вопрос не поняли), а потому что сам допер. А ты думай что хочешь, мне пох

terminator-101
() автор топика
Ответ на: комментарий от ritsufag

Первое сообщение — вообще не в кассу. Да, я написал заново строку, имея в виду, заново подстроку, чя просто не точно выразился. Второе — твое, ты вообще них*янепонел ни сабж, ни работу конструкции.

terminator-101
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.