2009-05-09 5 views

Répondre

3

Je pense que vous voulez ceci:

str.replace(/^(.*)<br>(.*?)$/, '$1$2') 

Cela correspond avidement tout depuis le début à un <br>, puis un <br>, puis correspond ungreedily tout à la fin.

+1

Wouldnt vous voulez qu'il soit: str.replace (/^(. *) ((
) *?) $ /, '$ 1 $ 2') afin d'inclure le
dans le dernier match? –

+0

L'idée est de supprimer le dernier
Greg

13

Vous pouvez utiliser le fait que les quantificateurs sont gourmands:

str.replace(/(.*)<br>/, "$1"); 

Mais l'inconvénient est qu'il fera revenir en arrière.

Une autre solution serait de diviser la chaîne, mettre les deux derniers éléments ensemble, puis rejoindre les parties:

var parts = str.split("<br>"); 
if (parts.length > 1) { 
    parts[parts.length - 2] += parts.pop(); 
} 
str = parts.join("<br>"); 
+0

'str.replace (/ ([\ s \ S] *)
/," $ 1 ");' pour multiligne. – hlcs

0
String.prototype.replaceLast = function(what, replacement) { 
    return this.replace(new RegExp('^(.*)' + what + '(.*?)$'), '$1' + replacement + '$2'); 
} 

str = str.replaceLast(what, replacement); 
+0

Une réponse composée uniquement de code sans ou avec peu d'explications, il est difficile de comprendre pour les futurs visiteurs qui approchent le demandeur devrait prendre et pourquoi votre réponse est viable. Veuillez ajouter des explications à votre code. – Xufox

Questions connexes