Jawaban:
Anda bisa mencoba ini
var mySubString = str.substring(
str.lastIndexOf(":") + 1,
str.lastIndexOf(";")
);
Anda juga dapat mencoba ini:
var str = 'one:two;three';
str.split(':').pop().split(';')[0]; // returns 'two'
str.split(':').pop().split(';')[0]mungkin lebih cepat daripada menggunakan.shift()
Menggunakan split()
var s = 'MyLongString:StringIWant;';
var arrStr = s.split(/[:;]/);
alert(arrStr);
arrStrakan berisi semua string yang dibatasi oleh :atau ;
Jadi akses setiap string melaluifor-loop
for(var i=0; i<arrStr.length; i++)
alert(arrStr[i]);
\[(.*?)\] ---> Singkatnya Anda harus keluar dari tanda kurung siku, karena [] menunjukkan kelas karakter dalam regex.
@Babasaheb Gosavi Jawaban sempurna jika Anda memiliki satu kemunculan substring (":" dan ";"). tetapi begitu Anda memiliki beberapa kejadian, itu mungkin akan sedikit rumit.
Solusi terbaik yang saya buat untuk bekerja pada banyak proyek adalah menggunakan empat metode di dalam suatu objek.
Jadi cukup berbicara, mari kita lihat kodenya:
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]
RangeError: Maximum call stack size exceededpengecualian.
var s = 'MyLongString:StringIWant;';
/:([^;]+);/.exec(s)[1]; // StringIWant
Saya suka metode ini:
var str = 'MyLongString:StringIWant;';
var tmpStr = str.match(":(.*);");
var newStr = tmpStr[1];
//newStr now contains 'StringIWant'
Saya menggunakan cara @tsds tetapi dengan hanya menggunakan fungsi split.
var str = 'one:two;three';
str.split(':')[1].split(';')[0] // returns 'two'
kata hati-hati: jika tidak ada ":" dalam string mengakses indeks '1' dari array akan menimbulkan kesalahan! str.split (':') [1]
Oleh karena itu cara @tsds lebih aman jika ada ketidakpastian
str.split(':').pop().split(';')[0]
function substringBetween(s, a, b) {
var p = s.indexOf(a) + a.length;
return s.substring(p, s.indexOf(b, p));
}
// substringBetween('MyLongString:StringIWant;', ':', ';') -> StringIWant
// substringBetween('MyLongString:StringIWant;;', ':', ';') -> StringIWant
// substringBetween('MyLongString:StringIWant;:StringIDontWant;', ':', ';') -> StringIWant
Anda dapat menggunakan fungsi urutan yang lebih tinggi untuk mengembalikan versi 'kompilasi' ekstraktor Anda, dengan cara itu lebih cepat.
Dengan regex, dan kompilasi regex sekali dalam penutupan, pertandingan Javascript akan mengembalikan semua pertandingan.
Ini membuat kita hanya perlu menghapus apa yang kita gunakan sebagai spidol kita (yaitu:) {{dan kita bisa menggunakan panjang string untuk ini dengan slice.
function extract([beg, end]) {
const matcher = new RegExp(`${beg}(.*?)${end}`,'gm');
const normalise = (str) => str.slice(beg.length,end.length*-1);
return function(str) {
return str.match(matcher).map(normalise);
}
}
Kompilasi sekali dan gunakan beberapa kali ...
const stringExtractor = extract(['{','}']);
const stuffIneed = stringExtractor('this {is} some {text} that can be {extracted} with a {reusable} function');
// Outputs: [ 'is', 'text', 'extracted', 'reusable' ]
Atau sekali pakai ...
const stuffIneed = extract(['{','}'])('this {is} some {text} that can be {extracted} with a {reusable} function');
// Outputs: [ 'is', 'text', 'extracted', 'reusable' ]
Juga lihat replacefungsi Javascript tetapi menggunakan fungsi untuk argumen penggantian (Anda akan melakukannya jika misalnya Anda melakukan mesin templat mini (interpolasi string) ... lodash.get juga bisa membantu kemudian untuk mendapatkan nilai yang Anda inginkan ubah dengan ? ...
Jawaban saya terlalu panjang tetapi mungkin bisa membantu seseorang!
Anda juga dapat menggunakan ini ...
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");
// " - 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,'"')">Click</button>
</div>
</div>
Dapatkan string di antara dua substring (berisi lebih dari 1 karakter)
function substrInBetween(whole_str, str1, str2){
if (whole_str.indexOf(str1) === -1 || whole_str.indexOf(str2) === -1) {
return undefined; // or ""
}
strlength1 = str1.length;
return whole_str.substring(
whole_str.indexOf(str1) + strlength1,
whole_str.indexOf(str2)
);
}
Catatan saya menggunakan indexOf()bukan lastIndexOf()jadi itu akan memeriksa untuk kemunculan pertama dari string tersebut
strlength1variabel? Nilai harus digunakan sebaris sebagai gantinya. Juga tidak jelas gaya huruf apa yang Anda gunakan. strlength1- tidak ada gaya, whole_str- kasing ular.
Coba ini untuk Mendapatkan Substring antara dua karakter menggunakan javascript.
$("button").click(function(){
var myStr = "MyLongString:StringIWant;";
var subStr = myStr.match(":(.*);");
alert(subStr[1]);
});
Diambil dari @ Temukan substring antara dua karakter dengan jQuery
Menggunakan jQuery :
get_between <- function(str, first_character, last_character) {
new_str = str.match(first_character + "(.*)" + last_character)[1].trim()
return(new_str)
}
tali
my_string = 'and the thing that ! on the @ with the ^^ goes now'
penggunaan :
get_between(my_string, 'that', 'now')
hasil :
"! on the @ with the ^^ goes
Sebuah fungsi kecil yang saya buat yang dapat mengambil string di antara, dan dapat (opsional) melewatkan sejumlah kata yang cocok untuk mengambil indeks tertentu.
Selain itu, pengaturan startuntuk falseakan menggunakan awal string, dan pengaturan enduntuk falseakan menggunakan akhir string.
diatur pos1ke posisi startteks yang ingin Anda gunakan, 1akan menggunakan kejadian pertamastart
pos2melakukan hal yang sama seperti pos1, tetapi untuk end, dan 1akan menggunakan kejadian pertama endhanya setelah start, kejadian endsebelumnya startdiabaikan.
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;
}