Соответствие регулярному выражению только не ключевые слова - PullRequest
0 голосов
/ 08 марта 2019

У меня есть строка типа <dlskjfldjf>Text creation List<string> checking edit<br/>.Нужна помощь с регулярным выражением для соответствия только <dlskjfldjf>, а не List<string>

Ключевое слово может быть любого общего типа, например

IList<T>
List<T>
etc

Я пробовал с <([a-zA-Z]+)>, который будет соответствовать <dlskjfldjf> иниже которого будет соответствовать List<string>, но не уверен, как их смешать

((List|ilist|IList|IEnumerable|IQuerable)(<)([A-Za-z.,\[\]\s]*)(>))|(<T>)

Ответы [ 3 ]

1 голос
/ 08 марта 2019

На языке, который поддерживает Отрицательный взгляд назад шаблон, подобный этому, может работать:

(?<!(List|ilist|IList|IEnumerable|IQuerable))<([a-zA-Z]+)>

В JavaScript вам может понадобиться использовать два шаблона для достижения одного и того же результата, протестируйте один раз для шаблона угловых скобок, а затем еще раз, чтобы убедиться, что перед вами нет информации о типе.

1 голос
/ 10 марта 2019

То, что вы можете сделать, это сопоставить то, что вы не хотите хранить, и записать в группу то, что вы хотите сохранить:

\b(?:List|ilist|IList|IEnumerable|IQuerable)<[^<>]*>|(<[a-zA-Z]+>)

Это будет соответствовать:

  • \b Граница слова, чтобы любое из перечисленных слов в чередовании не являлось частью большего слова
  • (?: Группа без захвата
    • List|ilist|IList|IEnumerable|IQuerable Чередование, которое будет соответствовать любому изперечисленные слова
  • ) Закрыть группу без захвата
  • <[^<>]*> Совпадение <, а не <> 0+ раз, затем МАТ >
  • | Или
  • ( Группа захвата (что вы хотите сохранить)
    • <[a-zA-Z]+> Совпадение <, затем 1+ раз строчные или заглавные буквызатем >
  • ) Закрыть группу захвата

Например:

const regex = /\b(?:List|ilist|IList|IEnumerable|IQuerable)<[^<>]*>|(<[a-zA-Z]+>)/g;
const str = `<dlskjfldjf>Text creation List<string> checking edit<br/> or IList<string> or <aAbB>`;
let m;
let res = [];

while ((m = regex.exec(str)) !== null) {
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  if (m[1] !== undefined) res.push(m[1]);
}
console.log(res);
1 голос
/ 08 марта 2019

Использование отрицательного взгляда нулевой ширины за утверждением (?<! expression ):

string pattern = @"(?<!(List|ilist|IList|IEnumerable|IQuerable))<([a-zA-Z]+)>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...