2011-01-14 7 views

Respuesta

11

Código

var text1 = "abcdefgh"; 
var text2 = "cde"; 

alert(text1.substring(0, text1.indexOf(text2))); 
alert(text1.substring(0, text1.indexOf(text2) + text2.length)); 

primera alerta no incluye texto de búsqueda, el segundo lo hace.

Explicación

Voy a explicar la segunda línea del código.

text1.substring(0, text1.indexOf(text2) + text2.length)) 

 

text1.substring(startIndex, endIndex) 

Esta pieza de código toma cada personaje desde startIndex hasta endIndex, siendo 0 el primer carácter. Así que en nuestro código, que la búsqueda de 0 (inicio) y el punto final:

text1.indexOf(text2) 

Esto devuelve la posición del carácter de la primera instancia de texto2, en el texto 1.

text2.length 

Esto devuelve el longitud del texto 2, así que si queremos incluir esto en nuestro valor devuelto, lo agregamos a la longitud del índice devuelto, ¡dándonos el resultado devuelto!

4

Usted puede utilizar substring y indexOf:

Y.substring(0, Y.indexOf(X) + X.length)) 

DEMO

por supuesto que debe probar de antemano si X está en Y.

0
var index = y.indexOf(x); 
y = index >= 0 ? y.substring(0, y.indexOf(x) + x.length) : y; 
0
var X = 'S'; 
var Y = 'TEST'; 
if(Y.indexOf(X) != -1){ 
var pos = parseInt(Y.indexOf(X)) + parseInt(X.length); 
var str = Y.substring(0, pos); 
Y = str; 
} 
document.write(Y); 
+0

No es necesario utilizar 'parseInt' aquí. 'indexOf' y' length' siempre devuelven enteros. –

+0

@Felix Kling: Solo por mi hábito de usar parseInt(), cuando hago operaciones aritméticas –

3

Si usted está buscando para que coincida con solo X en Y y devolver sólo X, me gustaría sugerir el uso de match.

var x = "treasure"; 
var y = "There's treasure somewhere in here."; 
var results = y.match(new RegExp(x)); // -> ["treasure"] 

results, o bien ser una matriz vacía o contener la primera aparición de x.

Si quiere todo en y hasta e incluyendo la primera aparición de x, simplemente modifique la expresión regular un poco.

var results2 = y.match(new RegExp(".*" + x)); // -> ["There's treasure"] 
+0

¿Cómo puedo hacer si hay dos "tesoros" de tiempo en la cadena y quiero unirlos después de la última? – user2284570

Cuestiones relacionadas