Это выражение вызывается с немедленным вызовом в Javascript:
Чтобы понять IIFE в JS, давайте сломаем его:
< / blockquote>// Function Expression var greet = function(name){ return 'Namaste' + ' ' + name; } greet('Santosh');
Как работает выражение функции: - Когда JS-движок запускается в первый раз (Execution Context - Create Phase), эта функция (с правой стороны = выше) не запускается или не сохраняется в памяти. Переменной «greet» присваивается значение «undefined» двигателем JS. - Во время выполнения (Execution Context - Execute phase) объект funtion создается «на лету» (еще не выполнен), получает назначение переменной «greet» и может быть вызван с помощью «greet (« somename »)».
3. Сразу вызывается выражение Funtion:
Пример:
// IIFE var greeting = function(name) { return 'Namaste' + ' ' + name; }('Santosh') console.log(greeting) // Namaste Santosh.
Как работает IIFE: - Обратите внимание на «()» сразу после объявления функции. Каждый объект funtion имеет прикрепленное к нему свойство «CODE», которое может быть вызвано. И мы можем вызвать его (или вызвать) с помощью скобок (). - Таким образом, здесь, во время выполнения (Контекст выполнения - Выполнение фазы), объект функции создается и выполняется одновременно. Так что теперь вместо переменной funtion вместо переменной funtion есть возвращаемое значение (строка)
Типичная Usecase IIFE в JS:
В качестве примера используется обычная схема IIFE.
// IIFE // Spelling of Function was not correct , result into error (function (name) { var greeting = 'Namaste'; console.log(greeting + ' ' + name); })('Santosh');
- мы здесь делаем две вещи. a) Обертывание выражения функции внутри фигурных скобок (). Это означает, что синтаксический синтаксический анализатор все, что помещается внутри (), является выражением (выражение функции в этом случае) и является допустимым кодом. б) Мы вызываем эту функцию в то же время, используя () в конце ее.
Таким образом, эта функция создается и выполняется одновременно (IIFE).
Важная утилита для IIFE:
IIFE сохраняет наш код в безопасности. - IIFE, являясь функцией, имеет свой собственный контекст выполнения, то есть все переменные, созданные внутри него, являются локальными для этой функции и не разделяются с глобальным контекстом выполнения.
Предположим, что у меня есть еще один JS-файл (test1.js), используемый в моем приложении вместе с iife.js (см. ниже).
// test1.js var greeting = 'Hello'; // iife.js // Spelling of Function was not correct , result into error (function (name) { var greeting = 'Namaste'; console.log(greeting + ' ' + name); })('Santosh'); console.log(greeting) // No collision happens here. It prints 'Hello'.
Итак, IIFE помогает нам писать безопасный код, где мы не сталкиваемся с глобальными объектами непреднамеренно.
Ваше регулярное выражение почти работает, вы просто забыли избежать периода. Кроме того, в PHP вам нужны разделители:
'/@(.*?)\./s'
s - модификатор DOTALL .
Вот полный пример того, как вы можете использовать его в PHP:
$s = 'foo@bar.baz';
$matches = array();
$t = preg_match('/@(.*?)\./s', $s, $matches);
print_r($matches[1]);
Выход:
bar
Если вы изучаете регулярное выражение, вы можете также проанализировать их:
@\K[^.]++(?=\.)
(?<=@)[^.]++(?=\.)
Оба этих регулярных выражения используют притяжательные кванторы (++
). Используйте их, когда можете, чтобы избежать ненужного возврата. Кроме того, используя поисковые конструкции (или \K
), мы можем сопоставить часть между @
и .
в $matches[0]
.
Попробуйте это регулярное выражение:
@([^.]*)\.
Выражение [^.]*
будет соответствовать любому числу любого символа, кроме точки. И простая точка должна быть экранирована, поскольку это особый символ.
это лучший и быстрый в использовании
function get_string_between ($str,$from,$to) {
$string = substr($str, strpos($str, $from) + strlen($from));
if (strstr ($string,$to,TRUE) != FALSE) {
$string = strstr ($string,$to,TRUE);
}
return $string;
}