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);
arrStr
akan 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 exceeded
pengecualian.
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 replace
fungsi 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
strlength1
variabel? 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 start
untuk false
akan menggunakan awal string, dan pengaturan end
untuk false
akan menggunakan akhir string.
diatur pos1
ke posisi start
teks yang ingin Anda gunakan, 1
akan menggunakan kejadian pertamastart
pos2
melakukan hal yang sama seperti pos1
, tetapi untuk end
, dan 1
akan menggunakan kejadian pertama end
hanya setelah start
, kejadian end
sebelumnya start
diabaikan.
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;
}