Respuestas:
Puedes probar esto
var mySubString = str.substring(
str.lastIndexOf(":") + 1,
str.lastIndexOf(";")
);
También puedes probar esto:
var str = 'one:two;three';
str.split(':').pop().split(';')[0]; // returns 'two'
str.split(':').pop().split(';')[0]
puede ser más rápido que usarlo.shift()
Utilizar split()
var s = 'MyLongString:StringIWant;';
var arrStr = s.split(/[:;]/);
alert(arrStr);
arrStr
contendrá toda la cadena delimitada por :
o ;
Así accederá a cada cadena a través defor-loop
for(var i=0; i<arrStr.length; i++)
alert(arrStr[i]);
\[(.*?)\]
---> En resumen, necesita escapar de corchetes, ya que [] denota la clase de caracteres en la expresión regular.
@Babasaheb Gosavi La respuesta es perfecta si tiene una aparición de las subcadenas (":" y ";"). pero una vez que tiene múltiples ocurrencias, puede ser un poco complicado.
La mejor solución que se me ocurrió para trabajar en múltiples proyectos es usar cuatro métodos dentro de un objeto.
Hablando bastante, veamos el código:
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
excepción.
var s = 'MyLongString:StringIWant;';
/:([^;]+);/.exec(s)[1]; // StringIWant
Me gusta este metodo:
var str = 'MyLongString:StringIWant;';
var tmpStr = str.match(":(.*);");
var newStr = tmpStr[1];
//newStr now contains 'StringIWant'
Utilicé @tsds pero solo con la función de división.
var str = 'one:two;three';
str.split(':')[1].split(';')[0] // returns 'two'
advertencia: si no hay ":" en la cadena que accede al índice '1' de la matriz, se producirá un error. str.split (':') [1]
por lo tanto, la forma @tsds es más segura si hay incertidumbre
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
Puede usar una función de orden superior para devolver una versión 'compilada' de su extractor, de esa manera es más rápido.
Con expresiones regulares, y compilando las expresiones regulares una vez en un cierre, la coincidencia de Javascript devolverá todas las coincidencias.
Esto nos deja con solo tener que eliminar lo que usamos como nuestros marcadores (es decir:) {{
y podemos usar la longitud de la cadena para esto con el corte.
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);
}
}
Compila una vez y usa varias veces ...
const stringExtractor = extract(['{','}']);
const stuffIneed = stringExtractor('this {is} some {text} that can be {extracted} with a {reusable} function');
// Outputs: [ 'is', 'text', 'extracted', 'reusable' ]
O uso de una sola vez ...
const stuffIneed = extract(['{','}'])('this {is} some {text} that can be {extracted} with a {reusable} function');
// Outputs: [ 'is', 'text', 'extracted', 'reusable' ]
También mire los Javascript replace
función pero use una función para el argumento de reemplazo (lo haría si, por ejemplo, estuviera haciendo un mini motor de plantillas (interpolación de cadenas) ... lodash.get también podría ser útil para obtener los valores que desea reemplazar con ? ...
¡Mi respuesta es demasiado larga pero podría ayudar a alguien!
También puedes usar este ...
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>
Obtener una cadena entre dos subcadenas (contiene más de 1 carácter)
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)
);
}
Tenga en cuenta que uso en indexOf()
lugar de, lastIndexOf()
por lo que verificará las primeras ocurrencias de esas cadenas
strlength1
variable? El valor debe usarse en línea en su lugar. Tampoco está claro qué estilo de caja está utilizando. strlength1
- sin estilo, whole_str
- estuche de serpiente.
Intente esto para obtener una subcadena entre dos caracteres usando javascript.
$("button").click(function(){
var myStr = "MyLongString:StringIWant;";
var subStr = myStr.match(":(.*);");
alert(subStr[1]);
});
Tomado de @ Buscar subcadena entre los dos caracteres con jQuery
Usando jQuery :
get_between <- function(str, first_character, last_character) {
new_str = str.match(first_character + "(.*)" + last_character)[1].trim()
return(new_str)
}
cuerda
my_string = 'and the thing that ! on the @ with the ^^ goes now'
uso :
get_between(my_string, 'that', 'now')
resultado :
"! on the @ with the ^^ goes
Una pequeña función que hice que puede agarrar la cadena entre, y puede (opcionalmente) omitir varias palabras coincidentes para agarrar un índice específico.
Además, la configuración start
de false
utilizará el comienzo de la cadena y la configuración end
de false
utilizará el final de la cadena.
configurado pos1
en la posición del start
texto que desea utilizar, 1
utilizará la primera aparición destart
pos2
hace lo mismo que pos1
, pero para end
, y 1
usará la primera ocurrencia de end
solo después start
, las ocurrencias de end
antes start
se ignoran.
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;
}