使用javascript获取两个字符之间的子string

我试图从一个较大的string中提取一个string,它将一个“:”和一个“;”之间的所有内容都提取出来。

当前

Str = 'MyLongString:StringIWant;' 

期望的输出

 newStr = 'StringIWant' 

你可以试试这个

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

你也可以试试这个:

 var str = 'one:two;three'; str.split(':').pop().split(';').shift(); // returns 'two' 

使用split()

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

arrStr将包含由或分隔的所有string:
所以通过for-loop访问每个string

 for(var i=0; i<arrStr.length; i++) alert(arrStr[i]); 
 var s = 'MyLongString:StringIWant;'; /:([^;]+);/.exec(s)[1]; // StringIWant 

我喜欢这个方法:

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

@Babasaheb Gosavi答案是完美的,如果你有一个子string(“:”和“;”)。 但一旦你有多个事件,它可能会有点棘手。


我已经想出了处理多个项目的最佳解决scheme是在一个对象中使用四个方法。

  • 第一种方法:实际上是从两个string之间得到一个子string(但是只能find一个结果)。
  • 第二种方法:将删除最近发现的结果(可能是)后面和之后的子string。
  • 第三种方法:将一个stringrecursion地做上述两个方法。
  • 第四种方法:将应用第三种方法并返回结果。

所以说够了,让我们看看代码:

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

如何使用?

例:

 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] 

你也可以用这个…

 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>