Как сделать регулярное выражение, чтобы соответствовать строке в javascript? - PullRequest
0 голосов
/ 12 февраля 2020

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

fetch / https://upload.wikimedia.org/wikipedia/w_100/commons/f/f9/Phoenicopterus_ruber_in_São_Paulo_Zoo.jpg fetch / https://upload.wikimedia.org/wikipedia/w_100, h_100, fl_progressive, dpr_2.0 / commons / f / f9 / Phoenicopterus_ruber_in_São_Paulo_Zoo.jpg

, поэтому я хочу сопоставлять только первую строку w_100 и вторую строку w_100, h_100, fl_progressive, dpr_2.0, также разные URL-адреса.

var regex = /[a-z]_[0-9a-z]/g;
var found = string.match(regex);

это показывает мне что-то вроде

["w_1", "s_r", "r_i", "n_s"]

Я хочу что-то вроде этого

["w_100", "h_100", "fl_progressive", "dpr_2.0",]

Может кто-нибудь предложить мне регулярное выражение для этого .?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Вы можете использовать следующее регулярное выражение

let str = '/https://upload.wikimedia.org/wikipedia/w_100,h_100,fl_progressive,dpr_2.0,ar_3:4,quality_auto:good,effect_auto_brightness,effect_auto_color:50,effect_green:-30/commons/f/f9/Phoenicopterus_ruber_in_São_Paulo_Zoo.jpg'

console.log(str.match(/([a-z]+_([a-z]+|[0-9]+(\.[0-9]+)?)(?=(,|\/)))/g))

Обновление для дополнительного требования.

console.log(str.match(/([a-z]+(?:_|:|:-)?([a-z]+|[0-9]+(\.[0-9]+)?)(?=(,|\/)))+/g))
0 голосов
/ 12 февраля 2020

Причина совпадения трех символов для каждого совпадения заключается в том, что при использовании квадратных скобок '[]' вы сопоставляете один символ из возможного диапазона символов. Таким образом, ваше регулярное выражение в настоящее время ищет все, что имеет алфавитный c символ между az, затем подчеркивание и, наконец, еще один символ между 0-9 или az.

Чтобы соответствовать нескольким символам, вы можете добавить Звездочка '+' квантификатор, который говорит, что бит регулярного выражения, к которому он добавлен, должен соответствовать 1 или более раз.

Таким образом, чтобы получить полные совпадения, вы можете использовать следующее: /[a-z]+_[0-9a-z.]+/g

Однако это также будет соответствовать hoenicopterus_ruber, указанному в URL.

Чтобы обойти эту проблему, вы можете использовать положительный взгляд за спиной :

(?<=wikipedia\/|,)[a-z]+_[0-9a-z.]+

ПРИМЕЧАНИЕ: Я сделал предположение, что все URL, которые вы анализируете, являются ссылками из Википедии. Если это не так, вам понадобится другое решение для второго вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...