Javascript регулярное выражение для анализа строки - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть следующие строки:

id,square,vegetable.garden:id<>cell:gardenId
id,square,vegetable.garden:id<>cell:gardenId?id=10
id,square,vegetable.garden:id<>cell:gardenId@toto
id,square,vegetable.garden:id<>cell:gardenId^titi
id,square,vegetable.garden:id<>cell:gardenId?id=10@toto^titi
id,square,vegetable.garden:id<>cell:gardenId@toto^titi

С JS Я хочу сопоставить все параметры. У меня есть регулярное выражение

/(\S*)\.(\S*)([\?@\^])(\S*)([\?@\^])(\S*)([\?@\^])(\S*)/g

Но это регулярное выражение соответствия и параметры перехвата только для 5-й строки. У вас есть решение для соответствия всех строк?

Спасибо за вашу помощь.

Извините, если неясно.

У меня есть

id,square,vegetable.garden:id<>cell:gardenId?id=10@toto^titi

И я хочу разделить параметры, чтобы иметь:

group1 = id,square,vegetable
group2 = garden:id<>cell:gardenId
group3 = ?
group4 = id=10
group5 = @
group6 = toto
group7 = ^
group8 = titi

Предыдущее регулярное выражение работает. Но для другой строки это регулярное выражение не работает, потому что я могу иметь различный порядок для @, ^ или? разделитель, и они могут быть опциональными.

Онлайн RegEx с примерами здесь .

Это более понятно?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Предполагая, что у вас есть только 3 куска, на которые он может распространиться: Вот регулярное выражение, которое должно работать для вас: ([^\s.]*)\.([^?@^\s]+)(?:([?@^])([^?\s@^]+))?(?:([?@^])([^?\s@^]+))?(?:([?@^])([^?\s@^]+))?

Это соответствует всем приведенным вами примерам и, кажется, довольно быстро совпадает также. Повторяющийся бит (?:([?@^])([^?\s@^]+))? может совпадать, если есть знак?, @ Или ^, за которым следуют все символы, которые не являются ни одним из них, ни пробелом.

https://regex101.com/r/MRzMdK/2

0 голосов
/ 04 апреля 2020

Немного неясно, что вы хотите сделать, но вы можете попробовать что-то вроде этого, чтобы использовать регулярное выражение, чтобы увидеть, содержит ли строка другую строку:

const str1 = 'id,square,vegetable.garden:id<>cell:gardenId'
const str2 = 'id,square,vegetable.garden:id<>cell:gardenId?id=10'
const str3 = 'id,square,vegetable.garden:id<>cell:gardenId@toto'
const str4 = 'id,square,vegetable.garden:id<>cell:gardenId^titi'
const str5 = 'id,square,vegetable.garden:id<>cell:gardenId?id=10@toto^titi'
const str6 = 'id,square,vegetable.garden:id<>cell:gardenId@toto^titi'

const regex = new RegExp(str1, "ig")
const res = str2.match(regex)
console.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...