Проигнорированный флаг JavaScript

347
21 июля 2017, 05:21

В простом тексте вздумалось мне найти буквосочетания:

var text = "Просто прекрасно как я прусь с простого языка JavaScript"; 
 
    alert ( text.search( /ПР/ )); 
    alert ( text.search( /ПР/i )); 
    alert ( text.search( /ПР/g )); 

В результате все алерты выдают -1.

Я ожидаю 0 , 6 ... и т.д.

Answer 1

Метод search возвращает позицию первого совпадения или -1, если ничего не найдено. Ограничение метода search – он всегда ищет только первое совпадение. Нельзя заставить search искать дальше первого совпадения, такой синтаксис попросту не предусмотрен.

var text = "Просто прекрасно как я прусь с простого языка JavaScript"; 
 
alert(text.search(/ПР/)); // -1 - ничего не найдет из-за регистра 
alert(text.search(/ПР/i)); // 0 - найдет первое (i - не учитывая регистр) 
alert(text.search(/ПР/g)); // -1 - ничего не найдет из-за регистра 
alert(text.search(/ПР/ig)); // 0 - только 0 (из-за специфики 'search', 'g'-не влияет)  
alert(text.search(/Пр/)); // 0 - найдет первое учитывая регистр 
alert(text.search(/пр/g)); // 7 - первое, учитывая регистр ('g'-не влияет на 'search') 

Регулярные выражения могут иметь флаги, которые влияют на поиск. В JavaScript их три:

  • i - если этот флаг есть, то регэксп ищет независимо от регистра, то есть не различает между А и а.
  • g - если этот флаг есть, то регэксп ищет все совпадения, иначе – только первое.
  • m - многострочный режим.

На заметку ссылка для ознакомления: регулярные выражения.

Ну и на последок простой пример поиска всех совпадений в строке с использованием RegExp (наша регулярка, текст, ну и в цикле пробежим, пока есть совпадения будем добавлять их в результирующий массив, а затем выведем на экран найденные индексы):

var regex = /ПР/ig, 
  text = "Просто прекрасно как я прусь с простого языка JavaScript", 
  match, 
  indices = []; 
 
while (match = regex.exec(text)) { 
  indices.push(match.index); 
} 
alert(indices);

READ ALSO
Проблема с отображением координат мыши

Проблема с отображением координат мыши

Изучаю js и столкнулась с такой проблемой, мне нужно отобразить координаты мышки внутри блока, а сам блок двигать по вертикали в зависимости...

237
Как скриптом взять текст в одном span и вставить в другой в место текста который в нем?

Как скриптом взять текст в одном span и вставить в другой в место текста который в нем?

Как с помощью скрипта взять текст из одного тега span и вставить в span с другим классом (с предварительной очисткой span, в который добавляется...

388
Изменение размера картинки пользователем javascript

Изменение размера картинки пользователем javascript

Есть блок, в котором содержится картинка:

256
Мемоизация рекурсивных выражений

Мемоизация рекурсивных выражений

В книге Девида Фленегана в главе 88

313