Сопоставьте только контент из тега HTML, используя регулярное выражение [duplicate]

Проблема с «контекстом»

Термин «контекст» иногда используется для ссылки на объект, на который ссылается this . Его использование неуместно, потому что оно не подходит ни семантически, ни технически с помощью ECMAScript в этом .

«Контекст» означает обстоятельства, окружающие что-то, что добавляет смысл , или некоторая предшествующая и следующая информация, которая дает дополнительный смысл. Термин «контекст» используется в ECMAScript для ссылки на контекст выполнения , который является всеми параметрами, областью действия и этой в рамках некоторого исполняемого кода.

Это показано в разделе 10.4.2 ECMA-262 :

Установите значение ThisBinding на то же значение, что и ThisBinding для контекста выполнения вызова

, в котором четко указано, что этот является частью контекста выполнения.

Контекст выполнения предоставляет информацию, которая добавляет смысл в код, который выполняется , Он содержит гораздо больше информации о том, что только thisBinding .

Таким образом, значение этого не является «контекстом», это всего лишь одна часть выполнения контекст. Это, по сути, локальная переменная, которая может быть задана вызовом любого объекта и в строгом режиме для любого значения вообще.

198
задан Zanon 12 December 2015 в 15:26
поделиться

9 ответов

У меня была такая же проблема с использованием regex с bash-скриптами. Я использовал двухэтапное решение, используя трубы с grep -o, применяя

 '\[(.*?)\]'  

, а затем

'\b.*\b'

Очевидно, что это не так эффективно при других ответах, а альтернатива.

2
ответ дан A. Jesús 20 August 2018 в 20:43
поделиться

Чтобы удалить также [] использование:

\[.+\]
3
ответ дан Cătălin Rădoi 20 August 2018 в 20:43
поделиться

Вам просто нужно «захватить» бит между скобками.

\[(.*?)\]

Чтобы захватить, поместите его в круглые скобки. Вы не говорите, какой язык он использует. Например, в Perl вы получите доступ к этому, используя переменную $ 1.

my $string ='This is the match [more or less]';
$string =~ /\[(.*?)\]/;
print "match:$1\n";

Другие языки будут иметь разные механизмы. C #, например, использует класс Match collection , я считаю.

16
ответ дан cletus 20 August 2018 в 20:43
поделиться
  • 1
    «Easy done», LOL! :) Регулярные выражения всегда дают мне головную боль, я, как правило, забываю их, как только нахожу тех, которые решают мои проблемы. О ваших решениях: первый работает так, как ожидалось, второй - нет, он содержит в том числе скобки. Я использую C #, возможно, объект RegEx имеет свой собственный «аромат». двигателя регулярных выражений ... – Diego 21 September 2009 в 16:15
  • 2
    Спасибо, но это решение не сработало, оно включает в себя квадратные скобки. Как я писал в своем комментарии к решению Cletus, может быть, что объект C # RegEx интерпретирует его по-разному. Я не эксперт на C #, хотя, так что это всего лишь гипотеза, может быть, это просто моя нехватка знаний. :) – Diego 21 September 2009 в 16:17
  • 3
    Это происходит потому, что вы смотрите на весь матч, а не на первую подобранную группу. – cletus 21 September 2009 в 16:35
  • 4
    Большое спасибо, очень полезный сайт! Я сохраню это как ссылку. :) Извините, если я сделал некоторую путаницу, разработка C # на самом деле не одно из моих навыков. – Diego 21 September 2009 в 16:43
  • 5
    Это работает, если подстрока также содержит разделители? Например, в This is a test string [more [or] less] это вернет more [or] less? – gnzlbg 22 February 2013 в 20:49
  • 6
    @gnzlbg нет, он вернется и будет больше [или " – MerickOWA 10 July 2013 в 22:32
  • 7
    Извините, я не хотел, чтобы этот ответ был отрицательным !! – im3r3k 7 February 2017 в 01:26

Если вы используете 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"
30
ответ дан Community 20 August 2018 в 20:43
поделиться

Если вам нужно извлечь текст без скобок, вы можете использовать bash awk

echo " [hola mundo] " | awk -F'[][]' '{print $2}'

результат:

hola mundo

-1
ответ дан Nico 20 August 2018 в 20:43
поделиться

Этот специально работает для парсера регулярных выражений javascript /[^[\]]+(?=])/g

, просто запустите это в консоли

var regex = /[^[\]]+(?=])/g;
var str = "This is a test string [more or less]";
var match = regex.exec(str);
match;
2
ответ дан null 20 August 2018 в 20:43
поделиться

PHP:

$string ='This is the match [more or less]';
preg_match('#\[(.*)\]#', $string, $match);
var_dump($match[1]);
8
ответ дан realloc 20 August 2018 в 20:43
поделиться

[^\[] Сопоставьте любой символ, который не является [.

+ Сопоставьте 1 или более ничего, кроме [. Создает группы этих совпадений.

(?=\]) Положительный просмотр ]. Соответствует группе, заканчивающейся на ], не включая ее в результат.

Выполнено.

[^\[]+(?=\])

Доказательство.

http: // regexr.com/3gobr

Подобно решению, предложенному null. Но дополнительный \] не требуется. В качестве дополнительной заметки, кажется, \ не требуется, чтобы избежать [ после ^. Для удобства чтения я оставил бы его.

Не работает в ситуации, когда разделители идентичны. "more or less" например.

3
ответ дан Stieneee 20 August 2018 в 20:43
поделиться

Я хотел найти строку между / и #, но # иногда необязательно. Вот регулярное выражение, которое я использую:

  (?<=\/)([^#]+)(?=#*)
0
ответ дан techguy2000 20 August 2018 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: