Выполняет поиск совпадений в указанной строке. Возвращает массив результатов или null
Если вы хотите просто проверить, есть ли совпадения, используйте для этого метод test или String#search.
Метод exec
при совпадении возвращает массив и обновляет свойства объекта regexp
. Если совпадений нет - exec
возвращает null
.
Если указан флаг "g", то повторный вызов exec
будет давать следующее совпадение.
regexp = /a+(b+(c+))/g
str = "abc aabbcc"
result1 = regexp.exec(str)
result2 = regexp.exec(str)
- result1
- Вложенный массив совпадений ["abc", "bc", "c"]
- regexp.lastIndex после result1
- 3
- result2
- Вложенный массив совпадений ["aabbcc", "bbcc", "cc"]
- regexp.lastIndex после result2
- 10
Это происходит за счет автоматического обновления при выполнении exec
индекса конца последнего поиска lastIndex. Следующий поиск начинается от lastIndex
.
Например, следующий скрипт выдает все совпадения:
var myRe = /ab*/g;
var str = "abbcdefabh";
var myArray;
while ((myArray = myRe.exec(str)) != null)
{
var msg = "Нашел " + myArray[0] + ". ";
msg += "Следующий поиск начнется с " + myRe.lastIndex;
document.write(msg);
}
Он выведет текст:
Нашел abb. Следующий поиск начнется с 3
Нашел ab. Следующий поиск начнется с 9
Вы можете вызвать exec
при неявном определении объекта RegExp:
var matches = /(hello \S+)/.exec('This is a hello world!');
alert(matches[1]);
а что если .exec() выдает ошику
данный метод не поддерживается ?
Сравните примеры в хелпе с вашим кодом. Я думаю у вас регулярка в кавычках, поэтому и не работает. Мой пример:
var reg = /яхту/i;
var ex = reg.exec('Хуй на руль и поехали на ваську смотреть на яхту Обрамовича!');
document.writeln(ex);
Господа и дамы, помогите пожалуйста :
Есть строка q23123123 bababa q23123123
Как мне выделить строку bababa
я пытаюсь вот так:
s1">\s*\S*\w*\W*<\/str>
но мне возвращается ">bababa
возможно ли выделить только bababa
Использовать () $1 ?
а чем \[a-b]+ не устраивает? если речь о регекспе идет
хм, если известны эти части "q23123123".. я бы сделал вот так:
работает
других способов сходу придумать не могу к сожалению с этим способом пробелы по краям остались...
Кстати,что за "незапоминающие скобки"?
У меня все что находится между скобок присутствует в результате.
(?=что-то)
(?!что-то)
(?:что-то)
это имеется ввиду не запоминающие скобки.
У меня тоже незапоминающие скобки не работают: выражение находится нормально, но в результат всё-равно включается то что было внутри этих скобок- хотя не должно (FF 3.6.16)
Илья Кантор, кажется вы забыли написать что возвращаемое значение - не просто массив, а с очень важным свойством index указывающего позицию вхождения.
Следует отметить, что myArray[1] если его нет в ie7,8 равен пустой строке, а в остальных браузерах равен undefined!!!
В статье написано regexp.lastIndex после result2 10
Почему 10? Не понимаю. 6 может?
Почему у меня код криво работает:
По идее, должен выводить все совпадения, а у меня только первое совпадение -
aaa
, даже указан флаг глобального поиска.Знаете, у меня та же проблема. Скорее всего, это из-за того, что мы ставим регулярное выражение в открытом виде, а надо, видимо, вначале в переменную внести, а потом только её использовать.
Подскажите, пожалуйста, почему при вызове метода exec() в консоли, возвращает undefined (вместо null) в чем причина, что я делаю не так?
пример:
var regex = /^https?:\/\//;
var arr = reg.exec("https://logentries.com/app/4845c68c#f=1393829100000&s=log&t=1393915500000");
Надеюсь, это была шутка?
Сравнивать объект с null - это дико. Проверка объекта на null стандартно делается путём приведения к Boolean (тем более, что в операторе while - автоматически приведётся).
Действительно, должно быть !== )))