it-swarm.com.de

Holen Sie sich mit Javascript ein Zeichenkette zwischen zwei Zeichen

Ich versuche, eine Zeichenfolge aus einer größeren Zeichenfolge zu extrahieren, wo alles zwischen einem ':' und einem ';' steht.

Aktuell

Str = 'MyLongString:StringIWant;'

Gewünschte Ausgabe

newStr = 'StringIWant'
122
Rob

Sie können es versuchen

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

Sie können dies auch versuchen:

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

Verwenden Sie split()

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

arrStr enthält die gesamte Zeichenfolge, die durch : oder ; begrenzt ist.
Greifen Sie mit for-loop auf jeden String zu.

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

@Babasaheb Gosavi Die Antwort ist perfekt, wenn Sie einen Teil der Teilzeichenfolgen (":" und ";") haben. Wenn Sie jedoch mehrere Vorkommen haben, kann es etwas schwierig werden.


Die beste Lösung, die ich für die Arbeit an mehreren Projekten gefunden habe, ist die Verwendung von vier Methoden innerhalb eines Objekts.

  • Erste Methode: soll einen Teilstring zwischen zwei Strings erhalten (es wird jedoch nur ein Ergebnis gefunden).
  • Zweite Methode: Entfernt das (eventuell vorhandene) Ergebnis mit den Teilzeichenfolgen nach und vor ihm.
  • Dritte Methode: führt die obigen beiden Methoden rekursiv an einer Zeichenfolge aus.
  • Vierte Methode: wendet die dritte Methode an und gibt das Ergebnis zurück.

Code

Also genug reden, schauen wir uns den Code an:

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;
    }
};

Wie benutzt man?

Beispiel:

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

Ich mag diese Methode:

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

Ich habe @tsds übrigens nur mit der Split-Funktion verwendet.

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

Sie können dieses auch verwenden ...

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 @[email protected] 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

Versuchen Sie dies, um mit JavaScript zwischen zwei Zeichen zu wechseln.

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

Aus @ entnommen Teilstring zwischen den beiden Zeichen mit jQuery suchen

0
Ketan Savaliya

Verwenden von jQuery

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

string

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

Verwendungszweck :

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

Ergebnis :

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

Eine kleine Funktion, die ich erstellt habe und die die Zeichenfolge dazwischen erfassen und (optional) mehrere übereinstimmende Wörter überspringen kann, um einen bestimmten Index zu erfassen.

Wenn Sie start auf false setzen, wird der Anfang der Zeichenfolge verwendet, und wenn Sie end auf false setzen, wird das Ende der Zeichenfolge verwendet.

setze pos1 auf die Position des start zu verwendenden Texts, 1 verwendet das erste Vorkommen von start

pos2 macht dasselbe wie pos1, aber für end und 1 wird das erste Vorkommen von end erst nach start verwendet von end vor start werden ignoriert.

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