В настоящее время нет способа выбрать родительский элемент элемента в CSS.
Если бы был способ сделать это, это было бы в любой из текущих спецификаций селекторов CSS:
Тем временем, вам придется прибегнуть к JavaScript, если вам нужно выбрать родительский элемент.
Рабочий блок для выбора уровня 4 включает псевдокласс класса :has()
, который работает аналогично реализации jQuery . По состоянию на 2018 год это все равно не поддерживается никаким браузером .
Используя :has()
, исходный вопрос можно было бы решить с помощью этого:
li:has(> a.active) { /* styles to apply to the li tag */ }
Используйте группу захвата, если вы хотите извлечь совпадения: (test) | (long) Затем, в зависимости от используемого языка, вы можете ссылаться на сопоставленную группу, например, с помощью $ 1 и $.
Вы можете использовать
(?=.*test)(?=.*long)
Источник: MySQL SELECT LIKE или REGEXP для соответствия нескольким словам в одной записи
(?is)^(?=.*\b(test)\b)(?=.*?\b(long)\b).*
, который также захватывает слова и соответствует всей строке. Дальнейшая привязка к ^
начинает значительно улучшать производительность. \b
соответствует границе слова i>.
– bobble bubble
20 July 2017 в 16:18
Попробуйте следующее:
/(?i)(?:test.*long|long.*test)/
Это будет соответствовать либо test
, а затем long
или long
, а затем test
. Он будет игнорировать различия в данных.
, не зная, какой язык
/test.*long/
или
/long.*test/
или
/test/ && /long/
Я использовал libpcre с C, где я мог определять выноски. Они помогли мне легко совместить не только слова, но и любые подвыражения в любом порядке. Регулярное выражение выглядит так:
(?C0)(expr1(?C1)|expr2(?C2)|...|exprn(?Cn)){n}
, а функция выноски защищает то, что каждое подвыражение сопоставляется ровно один раз, например:
int mycallout(pcre_callout_block *b){
static int subexpr[255];
if(b->callout_number == 0){
//callout (?C0) - clear all counts to 0
memset(&subexpr,'\0',sizeof(subexpr));
return 0;
}else{
//if returns >0, match fails
return subexpr[b->callout_number-1]++;
}
}
. Что-то вроде этого должно быть возможно и в perl .
Я предполагаю (всегда опасно), что вы хотите найти целые слова, поэтому «тест» будет соответствовать, но «testy» не будет. Таким образом, шаблон должен искать границы слов, поэтому я использую шаблон границы слова «\ b».
/(?i)(\btest\b.*\blong\b|\blong\b.*\btest\b)/
Я не думаю, что вы можете сделать это с помощью одного регулярного выражения. Вам понадобится логическое И из двух - поиск каждого слова.