Термин «контекст» иногда используется для ссылки на объект, на который ссылается this . Его использование неуместно, потому что оно не подходит ни семантически, ни технически с помощью ECMAScript в этом .
«Контекст» означает обстоятельства, окружающие что-то, что добавляет смысл , или некоторая предшествующая и следующая информация, которая дает дополнительный смысл. Термин «контекст» используется в ECMAScript для ссылки на контекст выполнения , который является всеми параметрами, областью действия и этой в рамках некоторого исполняемого кода.
Это показано в разделе 10.4.2 ECMA-262 :
Установите значение ThisBinding на то же значение, что и ThisBinding для контекста выполнения вызова
, в котором четко указано, что этот является частью контекста выполнения.
Контекст выполнения предоставляет информацию, которая добавляет смысл в код, который выполняется , Он содержит гораздо больше информации о том, что только thisBinding .
Таким образом, значение этого не является «контекстом», это всего лишь одна часть выполнения контекст. Это, по сути, локальная переменная, которая может быть задана вызовом любого объекта и в строгом режиме для любого значения вообще.
У меня была такая же проблема с использованием regex с bash-скриптами. Я использовал двухэтапное решение, используя трубы с grep -o, применяя
'\[(.*?)\]'
, а затем
'\b.*\b'
Очевидно, что это не так эффективно при других ответах, а альтернатива.
Чтобы удалить также [] использование:
\[.+\]
Вам просто нужно «захватить» бит между скобками.
\[(.*?)\]
Чтобы захватить, поместите его в круглые скобки. Вы не говорите, какой язык он использует. Например, в Perl вы получите доступ к этому, используя переменную $ 1.
my $string ='This is the match [more or less]';
$string =~ /\[(.*?)\]/;
print "match:$1\n";
Другие языки будут иметь разные механизмы. C #, например, использует класс Match collection , я считаю.
This is a test string [more [or] less]
это вернет more [or] less
?
– gnzlbg
22 February 2013 в 20:49
Если вы используете JavaScript, первое решение , предоставленное cletus, (?<=\[)(.*?)(?=\])
, не будет работать, потому что JavaScript не поддерживает оператор lookbehind.
Однако, второе решение работает хорошо, но вам нужно получить второй согласованный элемент.
Пример:
var regex = /\[(.*?)\]/;
var strToMatch = "This is a test string [more or less]";
var matched = regex.exec(strToMatch);
Он вернется:
["[more or less]", "more or less"]
Итак, вам нужно второе значение. Использование:
var matched = regex.exec(strToMatch)[1];
Возврат:
"more or less"
Если вам нужно извлечь текст без скобок, вы можете использовать bash awk
echo " [hola mundo] " | awk -F'[][]' '{print $2}'
результат:
hola mundo
Этот специально работает для парсера регулярных выражений javascript /[^[\]]+(?=])/g
, просто запустите это в консоли
var regex = /[^[\]]+(?=])/g;
var str = "This is a test string [more or less]";
var match = regex.exec(str);
match;
PHP:
$string ='This is the match [more or less]';
preg_match('#\[(.*)\]#', $string, $match);
var_dump($match[1]);
[^\[]
Сопоставьте любой символ, который не является [.
+
Сопоставьте 1 или более ничего, кроме [
. Создает группы этих совпадений.
(?=\])
Положительный просмотр ]
. Соответствует группе, заканчивающейся на ]
, не включая ее в результат.
Выполнено.
[^\[]+(?=\])
Доказательство.
Подобно решению, предложенному null. Но дополнительный \]
не требуется. В качестве дополнительной заметки, кажется, \
не требуется, чтобы избежать [
после ^
. Для удобства чтения я оставил бы его.
Не работает в ситуации, когда разделители идентичны. "more or less"
например.
Я хотел найти строку между / и #, но # иногда необязательно. Вот регулярное выражение, которое я использую:
(?<=\/)([^#]+)(?=#*)