Javascript regexp remplacer, multiline

J’ai un contenu textuel (lu à partir du HTML en utilisant jQuery) qui ressemble à l’un de ces exemples:

39.98
USD

ou sur plusieurs lignes avec un prix supplémentaire, comme:

 47.14 39.98
USD

Les nombres pourraient être formatés comme

  • 1 234,99
  • 1239,99
  • 1 239,99

etc. (c’est-à-dire pas seulement un nombre décimal normal). Ce que je veux faire, c’est obtenir la valeur qui se trouve à l’intérieur du .

C’est ce que j’ai proposé jusqu’à présent, mais j’ai des problèmes avec l’approche multiligne et le fait qu’il existe potentiellement deux chiffres et que je veux ignorer le premier. J’ai essayé des variantes d’utilisation de ^ et $, et du modificateur multiligne “m”, mais sans succès.

 var strRegex = new RegExp(".*(.*?).*", "g"); var strPrice = strContent.replace(strRegex, '$1'); 

Je pourrais utiliser jQuery ici s’il existe un moyen de cibler la balise span à l’intérieur d’une chaîne (c’est-à-dire que ce n’est pas le DOM avec lequel nous avons affaire à ce stade).

essayez d’utiliser

 "[\s\S]*(.*?)[\s\S]*" 

au lieu de

 ".*(.*?).*" 

EDIT: puisque vous utilisez une chaîne de caractères pour définir votre expression rationnelle, n’oubliez pas d’esacpe vos barres obliques inverses,

 [\s\S] 

serait

 [\\s\\S] 

C’est assez facile avec jQuery. Enroulez simplement votre chaîne HTML dans une div et utilisez jQuery comme d’habitude:

 var myHTML = "Span 1 HTMLSpan 2 HTML
USD"; var $myHTML = $("
" + myHTML + "
"); $myHTML.find("span").each(function() { alert($(this).html()); });

Voici un violon qui fonctionne .

Vous pouvez d’abord supprimer tous les sauts de ligne de la chaîne, puis exécuter votre regex:

 strContent = strContent.replace(/(\r\n|\n|\r)/gm,""); var strRegex = new RegExp(".*(.*?).*", "g"); var strPrice = strContent.replace(strRegex, '$1'); 

Tu veux ça?

 var str = "39.98
USD\n47.14\n\n40.00
USD"; var regex = /([^<]*?)<\/span>/g; var matches = str.match(regex); for (var i = 0; i < matches.length; i++) { document.write(matches[i]); document.write("
"); }

Testez ici: http://jsfiddle.net/9LQGK/

Le tableau de matches contiendra les correspondances. Mais ce que vous voulez n’est pas vraiment clair. Qu’est-ce qu’il there's potentially two numbers and I want to ignore the first one moyen?