0
votes

Regex pour obtenir la dernière occurrence de "::" caractère

Je travaille avec une bibliothèque tierce qui concaténe une chaîne avec un double côlon :: code>. J'ai besoin de diviser cette chaîne parce que l'élément du côté droit est important pour moi, mais la gauche n'a pas d'importance.

Ie p> xxx pré>

Remarque: le texte sur le côté droit ne contient aucun : code> caractères p>

J'ai besoin d'écrire une regex pour obtenir le texte à droite. P>

var string = ":this:should:split::correctly:::and-return-this"


3 commentaires

Vous voulez que le résultat est et-retour-this ou correctement ::: and-return-this ?


Étant donné que votre réponse à la question de Namgold est la dernière option, vous pourriez faire quelque chose comme ceci: laissera Afterdubcol = str.replace (/^.*:: 0.*)$/, '$ 1');


William, pouvez-vous nous faire savoir si vous recherchez la chaîne après la dernière occurrence de :: même s'il a un supplémentaire: pour retourner et retourner -C'est (comme les réponses ci-dessous le font) ou souhaitez-vous ignorer le ::: et obtenir la dernière occurrence de :: pour revenir correctement ::: and-return-this ?


3 Réponses :



0
votes

Vous pouvez faire cela à l'aide des fonctions de regex ou de chaîne:

regex: strong> p>

  • Pour obtenir le texte après la présence em> de :: code> strong> - Utilisez :: (. +) code> - Cela fonctionnera même si la chaîne commence par :: code> li>
  • Pour obtenir le texte après la dernière survenance em> em> em> :: code> strong> - Utilisez ^. * :: (. *) - Cela fonctionnera pour des chaînes avec : code> après le dernier :: code>, mais il ne retournera rien si les derniers caractères sont :: CODE> li> ul>

    p>

    var string = ":this:should:split::correctly:::and-return-this";
    var result = string.slice(string.indexOf('::') + 2, string.length);
    console.log("After first occurrence = " + result);
    
    result = string.slice(string.lastIndexOf('::') + 2, string.length);
    console.log("After last occurrence = " + result);
    
    var string = ":this:should:split::correctly:::and-return:this";
    result = string.slice(string.lastIndexOf('::') + 2, string.length);
    console.log("Single : in last part = " + result);
    
    var string = ":this:should:split::correctly:::and-return-this:";
    result = string.slice(string.lastIndexOf('::') + 2, string.length);
    console.log("Ends with : = " + result);
    
    var string = ":this:should:split::correctly:::and-return-this::";
    result = string.slice(string.lastIndexOf('::') + 2, string.length);
    console.log("Ends with :: = " + result);
    
    var string = "::this:should:split::correctly:::and-return-this";
    result = string.slice(string.indexOf('::') + 2, string.length);
    console.log("Starts with :: = " + result);


0 commentaires

0
votes

Vous pourriez séparer sur un double côlon et affirmer ce qui est à gauche et à droite est n'importe quel caractère sauf un côlon.

(?<!:)::(?!:)


1 commentaires

J'ai également envisagé d'utiliser Split comme une option pour ma réponse aussi, mais cela ne fonctionne pas bien pour la chaîne d'échantillonnage dans la question ": ceci: devrait: Split :: correctement ::: et-retour-this" - il inclut le Extra : :)