Мне нужно обрезать очень длинную строку, которая может меняться во времени. Поскольку он html, я могу использовать имя тегов и атрибутов, чтобы разрезать его независимо от содержимого. К сожалению, я не могу найти способ написать регулярное выражение. В следующем примере:
Это (случайные символы) пример (случайные символы)
Как я могу сопоставить (случайные символы) и "Это", используя остальное, что всегда одно и то же? Я пробовал что-то вроде следующих:
^(This is)((.|\s)*an)$
This is^(?!.*(an))
но все, кажется, терпит неудачу. Я думаю, что часть "любой символ или пространство в промежутке" делает поиск подходящим до конца строки, и я пропускаю "часть", но я не могу понять, как добавить к этому исключение.
"Заглянуть за" было бы хорошо для этого, но, к сожалению, JS не поддерживает его. Однако вы можете использовать группы RegExp и группы захвата, чтобы получить желаемый результат.
let matchedGroups = new RegExp(/^This is (.+) an example (.+).$/,'g')
matchGroups.exec('This is (random characters) an example (random characters).')
Это возвращает массив:
0:"This is (random characters) an example (random characters)."
1:"(random characters)"
2:"(random characters)"
Как вы можете видеть, это немного неуклюже, но вы получите две строки, которые вы можете использовать.
let matchedGroups = new RegExp(/^(This is .+) an example (.+).$/,'g')
Я не знаю javascript, но я буду предполагать, что следующие функции, которые я напишу в некотором свободном C-подобном коде, существуют в той или иной форме:
string input = "This is (random characters) an example (random characters)";
string pattern = "(^This is .*) an example (.*$)";
RegexMatch match = Regex.Match( str, pattern );
string group0 = match.GetGroup(0);//this should contain the whole input
string group1 = match.GetGroup(1);//this should get the first part: This is (random characters)
string group2 = match.GetGroup(2);//this should get the second part: (random characters) at the end of the input string
Примечание. Обычно в регулярных выражениях круглые скобки создают группы захвата.
This is .*? an example .*
?\bThis is\b.+?(?=\ban\b)
быть полезным?