J'ai besoin de trouver des expressions rationnelles pour trouver des noms de sites Web qui ne suivent pas http: // ou https: // par exemple

http://www.google.co.in  ---dont match
http://www.google.co.in  ---dont match
www.google.co.in         ---match

L'URL peut également faire partie d'une chaîne plus grande comme

<p><a href="https://www.w3schools.com/html/">www.w3schools.com</a></p>

Ou

The URL To be Matched is www.w3schools.com and www.abc.com , URL Not to be matched is https://www.w3schools.com/html/

Dans lequel www.w3schools.com et www.abc.com (dans le deuxième exemple) doivent obtenir une correspondance, et il peut y avoir plusieurs URL dans la chaîne

Merci d'avance

0
biff 12 avril 2018 à 09:16

3 réponses

Meilleure réponse

En avez-vous besoin?

/(?<!https:\/\/)(?<!http:\/\/)(www\.[\w-.]*?[\w-]+?(\/[\w-]*?)*?)((?=[^\w.\/-]+?)|$)+/ig

Vous pouvez voir ici:

https://regex101.com/r/XvmR4V/4

Si vous avez une grande chaîne qui contient des noms de sites Web, cette expression régulière correspond à tous les noms, qui ne commencent pas par "http: //" ou "https: //". Les noms de vos sites Web doivent toujours commencer par "www" !!!

Sans lookaheads et lookbehinds, vous pouvez essayer ceci. Vous allez trouver les résultats dans le 2. Groupe (2 $).

/([^\/]{2,2})(www\.[\w-.]*?[\w-]+?(\/[\w-]*?)*?)(([^\w.\/-]+?)|$)+/ig

https://regex101.com/r/XvmR4V/5

Maintenant même pour www.google.de:

([^\/]{2,2}|^)(www\.[\w-.]*?[\w-]+?(\/[\w-]*?)*?)(([^\w.\/-]+?)|$)+

https://regex101.com/r/XvmR4V/6

Vous pouvez remplacer comme ça.

J'ai remplacé le 'www ...' par 'Test'.

/([^\/]{2,2}|^)(www\.[\w-.]*?[\w-]+?(\/[\w-]*?)*?)(([^\w.\/-]+?)|$)+/$1Test$4/gi

Je le teste avec l'outil regex-Tool d'IntelliJ.

Ma contribution était:

<p><a href="https://www.w3schools.com/html/"><a href="http://www.w3schools.com/html/">www.w3schools.com</a></p>
<p><a href="https://www.google.com/html/"><a href="http://www.google.com/html/">www.google.com</a>

Le résultat était:

<p><a href="https://www.w3schools.com/html/"><a href="http://www.w3schools.com/html/">Test</a></p>
<p><a href="https://www.google.com/html/"><a href="http://www.google.com/html/">Test</a>

Si cela aide, ce serait génial si vous votez pour :-)

1
D. Braun 18 avril 2018 à 07:26

Si vous souhaitez simplement exclure des chaînes commençant par http:// ou https://, cela est assez facile à faire avec une anticipation négative:

var match = "www.google.co.in";
var nomatch = "http://www.google.co.in";

var re = new RegExp("^(?!https?:\/\/).*$");
if (re.test(match)) {
    console.log(match + " is valid");
}
if (re.test(nomatch)) {
    console.log(nomatch + " is valid");
}

Un avantage de ce type de modèle est qu'il permettrait également de filtrer les URL de correspondance positive dans d'autres conditions.

0
Tim Biegeleisen 12 avril 2018 à 06:23

Vous pouvez utiliser l'expression régulière ^(http|https):// pour obtenir la correspondance de la chaîne contenant http:// ou https://. Ensuite, lorsque vous appliquez la correspondance, utilisez l'opérateur not (!) pour inverser la correspondance afin de ne pas inclure http:// ou https://:

var regEx = new RegExp("^(http|https)://", "i");
var str = "http://www.google.co.in";
var match = !regEx.test(str);
console.log(match + ' for ' + str);

str = 'http://www.google.co.in';
match = !regEx.test(str);
console.log(match + ' for ' + str);

str = 'www.google.co.in';
match = !regEx.test(str);
console.log(match + ' for ' + str);
0
Ankit Agarwal 12 avril 2018 à 06:24