web-dev-qa-db-fra.com

Obtenir une sous-chaîne entre deux personnages en utilisant javascript

J'essaie d'extraire une chaîne d'une plus grande chaîne où tout se trouve entre un ':' et un ';'.

Actuel

Str = 'MyLongString:StringIWant;'

Sortie désirée

newStr = 'StringIWant'
122
Rob

Tu peux essayer ça

var mySubString = str.substring(
    str.lastIndexOf(":") + 1, 
    str.lastIndexOf(";")
);
281
Babasaheb Gosavi

Vous pouvez aussi essayer ceci:

var str = 'one:two;three';    
str.split(':').pop().split(';')[0]; // returns 'two'
67
tsds

Utilisez split()

var s = 'MyLongString:StringIWant;';
var arrStr = s.split(/[:;]/);
alert(arrStr);

arrStr contiendra toute la chaîne délimitée par : ou ;
Donc, accédez à chaque chaîne via for-loop

for(var i=0; i<arrStr.length; i++)
    alert(arrStr[i]);
37
asifsid88

@ Babasaheb Gosavi La réponse est parfaite si vous avez une occurrence des sous-chaînes (":" et ";"). mais une fois que vous avez plusieurs occurrences, cela peut devenir un peu délicat.


La meilleure solution que j'ai trouvée pour travailler sur plusieurs projets consiste à utiliser quatre méthodes à l'intérieur d'un objet.

  • La première méthode: consiste à obtenir une sous-chaîne entre deux chaînes (cependant, il ne trouvera qu'un seul résultat).
  • Deuxième méthode: enlèvera le dernier résultat trouvé avec les sous-chaînes après et avant celle-ci.
  • Troisième méthode: effectuera les deux méthodes ci-dessus de manière récursive sur une chaîne.
  • Quatrième méthode: appliquera la troisième méthode et renverra le résultat.

Code

Assez parlé, voyons le code:

var getFromBetween = {
    results:[],
    string:"",
    getFromBetween:function (sub1,sub2) {
        if(this.string.indexOf(sub1) < 0 || this.string.indexOf(sub2) < 0) return false;
        var SP = this.string.indexOf(sub1)+sub1.length;
        var string1 = this.string.substr(0,SP);
        var string2 = this.string.substr(SP);
        var TP = string1.length + string2.indexOf(sub2);
        return this.string.substring(SP,TP);
    },
    removeFromBetween:function (sub1,sub2) {
        if(this.string.indexOf(sub1) < 0 || this.string.indexOf(sub2) < 0) return false;
        var removal = sub1+this.getFromBetween(sub1,sub2)+sub2;
        this.string = this.string.replace(removal,"");
    },
    getAllResults:function (sub1,sub2) {
        // first check to see if we do have both substrings
        if(this.string.indexOf(sub1) < 0 || this.string.indexOf(sub2) < 0) return;

        // find one result
        var result = this.getFromBetween(sub1,sub2);
        // Push it to the results array
        this.results.Push(result);
        // remove the most recently found one from the string
        this.removeFromBetween(sub1,sub2);

        // if there's more substrings
        if(this.string.indexOf(sub1) > -1 && this.string.indexOf(sub2) > -1) {
            this.getAllResults(sub1,sub2);
        }
        else return;
    },
    get:function (string,sub1,sub2) {
        this.results = [];
        this.string = string;
        this.getAllResults(sub1,sub2);
        return this.results;
    }
};

Comment utiliser?

Exemple:

var str = 'this is the haystack {{{0}}} {{{1}}} {{{2}}} {{{3}}} {{{4}}} some text {{{5}}} end of haystack';
var result = getFromBetween.get(str,"{{{","}}}");
console.log(result);
// returns: [0,1,2,3,4,5]
24
Alex C.
var s = 'MyLongString:StringIWant;';
/:([^;]+);/.exec(s)[1]; // StringIWant
15
otakustay

J'aime cette méthode:

var Str = 'MyLongString:StringIWant;';
var tmpStr  = Str.match(":(.*);");
var newStr = tmpStr[1];
//newStr now contains 'StringIWant'
9
Shane Gib.

J'ai utilisé @tsds façon mais en n'utilisant que la fonction split.

var str = 'one:two;three';    
str.split(':')[1].split(';')[0] // returns 'two'
2
Timar Ivo Batis

Vous pouvez aussi utiliser celui-ci ...

function extractText(str,delimiter){
  if (str && delimiter){
    var firstIndex = str.indexOf(delimiter)+1;
    var lastIndex = str.lastIndexOf(delimiter);
    str = str.substring(firstIndex,lastIndex);
  }
  return str;
}


var quotes = document.getElementById("quotes");

// &#34 - represents quotation mark in HTML
<div>


  <div>
  
    <span id="at">
      My string is @between@ the "at" sign
    </span>
    <button onclick="document.getElementById('at').innerText = extractText(document.getElementById('at').innerText,'@')">Click</button>
  
  </div>
  
  <div>
    <span id="quotes">
      My string is "between" quotes chars
    </span>
    <button onclick="document.getElementById('quotes').innerText = extractText(document.getElementById('quotes').innerText,'&#34')">Click</button>
  
  </div>

</div>

1
Meir Gabay

Essayez ceci pour obtenir une sous-chaîne entre deux caractères en utilisant javascript.

        $("button").click(function(){
            var myStr = "MyLongString:StringIWant;";
            var subStr = myStr.match(":(.*);");
            alert(subStr[1]);
        });

Extrait de @ Trouvez une sous-chaîne entre les deux caractères avec jQuery

0
Ketan Savaliya

Utiliser jQuery

get_between <- function(str, first_character, last_character) {
    new_str = str.match(first_character + "(.*)" + last_character)[1].trim()
    return(new_str)
    }

chaîne

my_string = 'and the thing that ! on the @ with the ^^ goes now' 

utilisation :

get_between(my_string, 'that', 'now')

résultat :

"! on the @ with the ^^ goes
0
Cybernetic

Une petite fonction que j'ai créée qui peut saisir la chaîne entre, et peut (facultativement) ignorer un certain nombre de mots correspondants pour saisir un index spécifique.

De plus, définir start sur false utilisera le début de la chaîne et définir end sur false utilisera la fin de la chaîne.

réglez pos1 sur la position du texte start que vous souhaitez utiliser, 1 utilisera la première occurrence de start

pos2 fait la même chose que pos1, mais pour end et 1 utilisera la première occurrence de end seulement après start, des occurrences de end avant start sont ignorés.

function getStringBetween(str, start=false, end=false, pos1=1, pos2=1){
  var newPos1 = 0;
  var newPos2 = str.length;

  if(start){
    var loops = pos1;
    var i = 0;
    while(loops > 0){
      if(i > str.length){
        break;
      }else if(str[i] == start[0]){
        var found = 0;
        for(var p = 0; p < start.length; p++){
          if(str[i+p] == start[p]){
            found++;
          }
        }
        if(found >= start.length){
          newPos1 = i + start.length;
          loops--;
        }
      }
      i++;
    }
  }

  if(end){
    var loops = pos2;
    var i = newPos1;
    while(loops > 0){
      if(i > str.length){
        break;
      }else if(str[i] == end[0]){
        var found = 0;
        for(var p = 0; p < end.length; p++){
          if(str[i+p] == end[p]){
            found++;
          }
        }
        if(found >= end.length){
          newPos2 = i;
          loops--;
        }
      }
      i++;
    }
  }

  var result = '';
  for(var i = newPos1; i < newPos2; i++){
    result += str[i];
  }
  return result;
}
0
SwiftNinjaPro