Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

test regexp

39 réponses
Avatar
unbewusst.sein
je veux savoir si userAgent comporte la chaine de caractère suivante :

AppleWebKit/527+

en particulier avec le "+" final et quelque soit le nombre, ici 527, et
qui pourrait être 525.18 (une version de build).

si j'écris le js suivant :

var isWebkitNightly=navigator.userAgent.match(RegExp(" AppleWebKit/[^
]+\+ "));

firefox me dit :
Erreur : invalid quantifier +
Fichier Source : http://127.0.0.1/Canvas/l_system_hair_ball.xhtml
Ligne : 69

si je supprime, juste pour essai, le \+, je n'ai pas cette erreur, j'en
déduis que le \+ a créé l'erreur.

je vais alors sur le site :
<http://www.regular-expressions.info/javascriptexample.html>

où j'entre :
Regexp: " AppleWebKit/[^ ]+\+ " // sans les ""
Subject string: "10_4_11; fr) AppleWebKit/525+ (KHT"

là, le même firefox 3RC1 ne me donne pas d'erreur, et pourtant le code
de cette page donne :

function demoMatchClick() {
var re = new RegExp(document.demoMatch.regex.value);
if (document.demoMatch.subject.value.match(re)) {
alert("Successful match");
} else {
alert("No match");
}
}

avec document.demoMatch.regex.value ce qui est entré en face de
"Regexp:"
et document.demoMatch.subject.value ce qui est entré en face de "Subject
string:"

il me semble que mon code est "équivalent" enfin, comme il ne marche pas
je me doute bien qu'il y a une différence, mais je ne vois pas laquelle.
--
Une Bévue

10 réponses

1 2 3 4
Avatar
unbewusst.sein
Une Bévue wrote:


j'ajoute que si je teste, en local cette fonction :


function demoMatchClick() {
var re = new RegExp(document.demoMatch.regex.value);
if (document.demoMatch.subject.value.match(re)) {
alert("Successful match");
} else {
alert("No match");
}
}



en la modifiant comme ceci (càd en incluant l'expression et le sujet
directement :
function demoMatchClick() {
var re = new RegExp(" AppleWebKit/[^ ]++ ");
if ("10_4_11; fr) AppleWebKit/527+
(KHTML".subject.value.match(re)) {
return true;
} else {
return false;
}
}

j'ai la même erreur, la regexp entrée dans l'input text du site
<http://www.regular-expressions.info/javascriptexample.html>

n'est donc pas exactement la même que celle entrée directement, comme
ci-dessus, en chaîne de caractère...

pourtant, si je fais un alert(document.demoMatch.regex.value); je ne
vois pas la différence, en particulier il y a bien un "+" dans
l'expression.

--
Une Bévue

Avatar
unbewusst.sein
Une Bévue wrote:

(KHTML".subject.value.match(re)) {


typo , lire :

(KHTML".match(re)) {


--
Une Bévue

Avatar
SAM

pourtant, si je fais un alert(document.demoMatch.regex.value); je ne
vois pas la différence, en particulier il y a bien un "+" dans
l'expression.



Curious c't'histoitre ..
M'enfin :
alert(navigator.userAgent.match(RegExp(/ AppleWebKit/[^ ]++ /)));
donne toutes satisfactions


('null' avec mon Safari qui n'a pas le famous +)
('null' avec mon Fx qui n'a rien de tout ça)

--
sm

Avatar
unbewusst.sein
Une Bévue wrote:

j'ai remplacé mon test comme suit :

function isWebkitNightlyBuild(){
return / AppleWebKit/[^ ]++ /.test(navigator.userAgent);
}

et là je n'ai pas de message d'erreur, et la détection est correcte :

Safari et Firefox sont à false
Webkit à true.

ceci dit j'aimerais bien comprendre pourquoi ça ne marche pas avec :

var re=new RegExp(" AppleWebKit/[^ ]++ ");

--
Une Bévue
Avatar
SAM
Une Bévue wrote:

(KHTML".subject.value.match(re)) {


typo , lire :

(KHTML".match(re)) {


ha ben j'avais même pas regardé :
c'était bien une histoire de jeu, non ?

ceci a l'air de fonctionner aussi :

javascript:var n=new RegExp(/ AppleWebKit/[^ ]++
/);alert(navigator.userAgent.match(n));

(pour employer a méthode déclarant la rexepr avant)
(remettre en 1 seule ligne y compris les blancs)

--
sm


Avatar
SAM

ceci dit j'aimerais bien comprendre pourquoi ça ne marche pas avec :

var re=new RegExp(" AppleWebKit/[^ ]++ ");


il faut dire que chez Moz ils ne se fatiguent pas avec tout ça ...

var re = /(w+)s(w+)/; // là ils font très court !
var str = "Jean Dupont";
var newstr = str.replace(re, "$2, $1");

<http://developer.mozilla.org/fr/docs/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core:Objets_globaux:RegExp#Exemple_:_utilisation_de_la_m.C3.A9thode_replace>

--
sm

Avatar
unbewusst.sein
SAM wrote:

Curious c't'histoitre ..
M'enfin :
alert(navigator.userAgent.match(RegExp(/ AppleWebKit/[^ ]++ /)));
donne toutes satisfactions


('null' avec mon Safari qui n'a pas le famous +)
('null' avec mon Fx qui n'a rien de tout ça)


oui, c'est ce que j'ai fini par faire :
function isWebkitNightlyBuild(){
return / AppleWebKit/[^ ]++ /.test(navigator.userAgent);
}

remarques que Webkit me donne aussi une erreur (moins bien
formulée/précisée qu'avec Firefox) dans le premier cas, je vais poser la
question sur clj des fois que...
--
Une Bévue

Avatar
Olivier Miakinen

j'ai remplacé mon test comme suit :

function isWebkitNightlyBuild(){
return / AppleWebKit/[^ ]++ /.test(navigator.userAgent);
}

et là je n'ai pas de message d'erreur, et la détection est correcte :

Safari et Firefox sont à false
Webkit à true.

ceci dit j'aimerais bien comprendre pourquoi ça ne marche pas avec :

var re=new RegExp(" AppleWebKit/[^ ]++ ");


Probablement parce que, « + » n'étant pas un caractère spécial pour les
chaînes de caractères, « + » est équivalent à « + », et ta chaîne est
donc équivalente à " AppleWebKit/[^ ]++ ".

Essaye avec : " AppleWebKit/[^ ]++ "

Avatar
SAM
SAM wrote:

M'enfin :
alert(navigator.userAgent.match(RegExp(/ AppleWebKit/[^ ]++ /)));
donne toutes satisfactions


oui, c'est ce que j'ai fini par faire :
function isWebkitNightlyBuild(){
return / AppleWebKit/[^ ]++ /.test(navigator.userAgent);
}


en effet, et fort des démos de Moz, on n'a même pas besoin de RegExp() :
javascript:alert(navigator.userAgent.match(/ AppleWebKit/[^ ]++ /));
comme tu l'as fait en dernier ressort

remarques que Webkit me donne aussi une erreur (moins bien
formulée/précisée qu'avec Firefox) dans le premier cas,


dans le second Safari n'est pas géné
dans le premier :

javascript:alert(navigator.userAgent.match(RegExp(' AppleWebKit/[^
]++ ')));

il me renvoie "AppleWebKit/419.3" au lieu de "null"

donc cette histoire de "" au lieu de // doit compter dans une RegExp

Olivier ? Pierre ? où êtes-vous ?

--
sm


Avatar
SAM

Ha! quand même !
On désespérait là :-)

j'ai remplacé mon test comme suit :

function isWebkitNightlyBuild(){
return / AppleWebKit/[^ ]++ /.test(navigator.userAgent);
}

ceci dit j'aimerais bien comprendre pourquoi ça ne marche pas avec :

var re=new RegExp(" AppleWebKit/[^ ]++ ");


Probablement parce que, « + » n'étant pas un caractère spécial pour les
chaînes de caractères, « + » est équivalent à « + », et ta chaîne est
donc équivalente à " AppleWebKit/[^ ]++ ".

Essaye avec : " AppleWebKit/[^ ]++ "


J'aurais bien proposé ça mais ... ça n'explique pas pourquoi :

/ AppleWebKit/[^ ]++ /

n'a pas besoin de ce +

--
sm


1 2 3 4