Envoyé par
SpaceFrog
Je me méfies des look arounds (?: )
C’est pas un lookaround, c’est juste un groupe non capturant. Comme un groupe (
) normal, sauf que ça ne crée pas d’entrée dans le tableau retourné en résultat.
1 2
| console.log("abcd".match(/b(c)/)); // Array [ "bc", "c" ]
console.log("abcd".match(/b(?:c)/)); // Array [ "bc" ] |
Envoyé par
bigs3232
et mon code de replace
1 2 3 4 5 6
|
lign='age doit être inférieure ou égale à 12V 6.66Amp ou 12V 6.66A'
rech='\d+(\.\d+\s?)?A';repl="eee"
var rech1 = new RegExp(rech,"ig")
lign=lign.replace(rech1,repl)
alert lign |
Le problème vient du fait que tu utilises le constructeur RegExp au lieu d’utiliser la syntaxe littérale entourée par des slashs /. Si tu déclares rech comme une chaîne, les séquences avec un antislash \ sont échapées : \d est transformé en d, \s en s, etc.
console.log('\d+(\.\d+\s?)?A'); // "d+(.d+s?)?A"
Deux solutions :
- échapper les antislashs : rech='\\d+(\\.\\d+\\s?)?A';
- utiliser la syntaxe littérale : rech1 = /\d+(\.\d+\s?)?A/ig;
Pour remplacer également « Amp », « Ampère » et « Ampere », il faut rajouter des groupes optionnels.
var rech1 = /\d+(?:\.\d+\s*)?A(?:mp(?:[èe]re)?)?/ig;
Pour visualiser la regex : https://regexper.com/#%2F%5Cd%2B%28%...%3F%29%3F%2Fig
Hors sujet : la notation « Amp » est typographiquement incorrecte. Soit on utilise le symbole « A », soit le nom complet « ampère » (avec une minuscule).
Partager