J'ai besoin de faire correspondre les nombres suivis d'une unité et de les remplacer par des chiffres + un trait de soulignement + une unité en utilisant Javascript.
J'ai sorti ce code, qui ne produit pas le résultat que je cherche à atteindre.
the street is 4.5 miles long the budget was 430.000 dollars
Le code ci-dessus doit renvoyer "J'ai 3_billions de dollars" (mais il renvoie _b en ce qui concerne la substitution). Comme je suis nouveau avec Java, toute suggestion serait appréciée.
Modifier Déjà de nombreux conseils utiles! Voici quelques exemples supplémentaires:
var x = myFunction("I have 3 billion dollars"); function myFunction(text) { return text.replace(/(\d+\.?(?:\d{1,2})?) (\bmillion\b|\bbillion\b|\bbillion\b|\bmillions\b|\bbillions\b|\btrillion\b|\btrillions\b|\bmeter\b|\bmeters\b|\bmile\b|\bmiles\b|\%)/gi, function (match) { return "<span class='highlighted'>" + match[1] + "_" + match[2] + "</span>"; }); }
3 Réponses :
match
n'est pas un tableau mais une chaîne. Vous pouvez le diviser
par ''
rejoindre par _
var x = myFunction("I have 3 billion dollars"); function myFunction(text) { return text.replace(/(\d+\.?(?:\d{1,2})?) (\bmillion\b|\bbillion\b|\bbillion\b|\bmillions\b|\bbillions\b|\btrillion\b|\btrillions\b|\bmeter\b|\bmeters\b|\bmile\b|\bmiles\b|\%)/gi, function (match) { console.log(match) return "<span class='highlighted'>" +match.split(' ').join('_')+ "</span>"; }); } console.log(x)
Nous pouvons utiliser str.replace
avec votre expression d'origine, si cela fonctionne:
const regex = /(\d+\.?(?:\d{1,2})?) (\bmillions?\b|\bbillions?\b|\btrillions?\b|\bmeters?\b|\bmiles?\b|\%)/gm; const str = `3 billion 3 million 3 % 2 meters`; const subst = `<span class='highlighted'>" $1_$2 "</span>`; // The substituted value will be contained in the result variable const result = str.replace(regex, subst); console.log(result);
Nous pouvons également simplifier légèrement notre expression:
(\d+\.?(?:\d{1,2})?) (\bmillions?\b|\bbillions?\b|\btrillions?\b|\bmeters?\b|\bmiles?\b|\%)
const regex = /(\d+\.?(?:\d{1,2})?) (\bmillion\b|\bbillion\b|\bbillion\b|\bmillions\b|\bbillions\b|\btrillion\b|\btrillions\b|\bmeter\b|\bmeters\b|\bmile\b|\bmiles\b|\%)/gm; const str = `3 billion 3 million`; const subst = `<span class='highlighted'>" $1_$2 "</span>`; // The substituted value will be contained in the result variable const result = str.replace(regex, subst); console.log('Substitution result: ', result);
Si cette expression n'était pas souhaitée et que vous souhaitez la modifier, veuillez consulter ce lien à l'adresse regex101.com .
jex.im visualise les expressions régulières:
Toutes les réponses étaient bonnes, mais j'ai choisi celle-ci car très complète et informative.
Exemple simple et plus clair pour vous
let regex = /\d+ (million|billion|millions|billions|trillion|trillions|meter|meters|mile|miles)/g let match = "I have 3 billion dollars".match(regex) let replace = match.map(x => x.split(" ").join("_")) console.log(replace)
Quelle est la variation de la chaîne d'entrée? pouvez-vous fournir plus d'échantillons ou serait-ce toujours quelque chose de similaire à chaîne numéro space unit chaîne ?
match
dans lafunction (match)
est la chaîne entière correspondante. Vous pouvez le faire avecfunction (match, group1, group2)
et utilisergroup1
etgroup2
au lieu dematch [1] code> et
correspondent [2]
, mais vous n'avez vraiment pas besoin de la méthode anonyme, utiliseztext.replace (your_regex, " $ 1_ $ 2 span > ")
Salut Randy, l'entrée est essentiellement un texte en cours d'exécution qui peut contenir des nombres (n'importe quel format) et un ensemble d'unités de mesure. Dans ce cas, j'étais plus intéressé par l'erreur de mon Javascrit et moins par la regex (que je devrais peut-être adapter). L'erreur étant que "match" n'était pas un tableau mais une chaîne, comme indiqué dans les réponses.