J'essaie de faire correspondre le chemin ci-dessous avec une expression régulière.
(\/content\/[a-z-]+)\/[a-z]{2}_[A-Z]{2}\/book(ing-path)?\/(sample-|sample-details)(.*).[0-9]{5}.*
/content/test-site is optional- it might not present sometimes in url.
La règle d'expression régulière actuelle (\ / content \ / {1} \ S +) aurait été adéquate.
Le problème est qu'il correspond au chemin complet tel que /content/test-site/en_US/abc.html.
J'ai besoin il doit correspondre uniquement à /content/test-site.
Exemple de chemin à rechercher:
https://localhost:4502/content/test-site/en_US/book/city/sample-rooms/airport-inn/propertyCode.00000.html
Regex I ' J'ai essayé de loin;
# test-site could be anything like "shoe-site", "best-clock", etc. /content/test-site
Qu'est-ce que je fais de mal et comment puis-je y remédier?
3 Réponses :
Regex pour correspondre à n'importe quel caractère attendu /:
const url = '/content/test-site/en_US/abc.html'; const path = url.match(/content\/[^\/]+/) console.log(path[0])
Il s'agit de classes de caractères. Une classe de caractères commençant par un signe d'insertion correspondra à tout ce qui n'est pas dans la classe. En savoir plus à ce sujet.
Donc, avec javascript: p>
content\/[^\/]+
Voici une autre approche:
(?: # Non-capturing group
\/[a-zA-Z0-9-]+ # Match starting with / and followed with characters/digits/-
) # Close grouping
{2} # Match two times, i.e. only match with two /
Explication:
(?:\/[a-zA-Z0-9-]+){2}
Pourquoi avez-vous supposé que le «contenu» n'était pas une constante?
@AhmedAbdelhameed dans la question, il ne mentionne nulle part que le contenu est une constante. Et si ce n'est pas le cas? On ne sait pas, je laisse ça à OP pour décider. Ma réponse n'est qu'une des approches possibles.
Le PO l'a utilisé comme constante (c'est-à-dire dans son modèle). Je ne supposerais pas le contraire, mais c'est peut-être juste moi :)
@AhmedAbdelhameed Je vois votre point, je ne pense pas que ma réponse fasse de mal cependant, si OP confirme que c'est une constante, je supprimerai la réponse, pas de problème.
@AhmedAbdelhameed merci pour la réponse. pouvez-vous me dire?: pourquoi cela est nécessaire? Merci.
@Sri ceci est un groupe non capturant, voir ici stackoverflow.com/questions/3512471/...
/ content / test-site est facultatif, dans l'expression régulière ci-dessus, il dit +, je ne suis pas sûr si je pourrais faire un groupe entier zéro ou une fois.
Si "test-site" se compose toujours de deux mots (alphanumériques ou soulignés) séparés par
-, vous pouvez utiliser\ / content \ / \ w + - \ w +. Consultez-le ici: regex101.com/r/vjx05U/1 . Si cela peut être autre chose que/, vous pouvez utiliser\ / content \ / [^ /] +. Veuillez noter que{1}est redondant.Remplacez simplement
\ S +par[^ \ /] +Mach pour la répétition de caractères. Voir ici stackoverflow.com/questions/1023902/...
soo ... correspondez-vous à une URL complète ou simplement au chemin? Parce que votre exemple de "chemin à rechercher" est une URL complète ...
@CrayonViolent juste le chemin - pas l'URL complète. parfois, il aurait / content / test-site, parfois non. / fr_US / ... etc.