Я не думаю, что вы можете выбрать родителя только в css.
Но поскольку у вас уже есть класс .active
, не было бы легче перенести этот класс на li
(вместо a
)? Таким образом, вы можете получить доступ только к li
и a
только через css.
Вам нужен шаблон только с lookahead:
\s+(?=delim1|delim2)
\s+
будет соответствовать одному или нескольким пробелам (так как ваша строка содержит пробелы). Если не может быть пробелов, используйте \s*
(но тогда вам нужно будет удалить пустые записи из результата). См. Демонстрацию regex . Если эти разделители должны быть целыми словами, используйте границы слова \b
: \s+(?=\b(?:delim1|delim2)\b)
.
В C #:
addrArr = Regex.Split(inputText, string.Format(@"\s+(?={0})", string.Join("|", delimeters)));
Если разделители могут содержать специальные метасимволы регулярных выражений, вы будете необходимо запустить Regex.Escape
в списке delimiters
.
A C # demo :
var inputText = "substring1 delim1 substring2 delim2 substr3";
var delimeters = new List<string> { "delim1", "delim2" };
var addrArr = Regex.Split(inputText,
string.Format(@"\s+(?={0})", string.Join("|", delimeters.Select(Regex.Escape))));
Console.WriteLine(string.Join("\n", addrArr));
Я думаю, вам нужно использовать lookahead, а не lookbehind, чтобы это работало (хотя и не пробовал).
Кроме того, вы должны быть осторожны с разделителями;
Попробуйте следующее:
addrArr= Regex.Split(inputText, string.Format("(?={0}|{1})", Regex.Escape(delimeter1), Regex.Escape(delimeter2)), RegexOptions.None);
Regex.Escape
, я бы рекомендовал always i> использовать его при конкатенации шаблона с литералами, даже если на входе не должно содержаться недопустимых символов. В зависимости от того, как код используется позже, это могло бы иначе открыть вектор атаки (сбой приложения из-за неправильного шаблона или, возможно, даже хуже). – Lucero 31 October 2016 в 13:53Regex.Escape
шаблон будет выглядеть какstring.Format(@"\s+(?={0})", string.Join("|", delimeters.Select(Regex.Escape)))
. Однако помните, что в случае, если разделители могут содержать символы без слова в начале / конце, вы не сможете использовать\b
, потребуется некоторая логическая логика. – Wiktor Stribiżew 31 October 2016 в 13:55