2010-06-12 17 views
5

Digamos que tiene una cadena: "La vaca ABC saltó sobre XYZ la luna" y quiere usar jQuery para obtener la subcadena entre "ABC" y "XYZ", ¿cómo haría esto? ? La subcadena debe ser "vaca saltó encima". ¡Muchas gracias!Usando jQuery para encontrar una subcadena

+0

En primer lugar, no utiliza jQuery para hacer la manipulación de cadenas - que es Javascript/ECMAScript. En segundo lugar, ¿puede ser más específico con respecto a la lógica utilizada para tomar esa cadena? ¿Hay un patrón? –

+0

Pregunta para jQuery no etiquetado con jQuery –

+0

Bueno, de todos modos, ¿por qué necesita jQuery? no puede simple javascript trabajar para usted –

Respuesta

6

Esto no tiene nada que ver con jQuery, que es principalmente para el cruce DOM y la manipulación. ¿Quieres una expresión regular simple:

var str = "The ABC cow jumped over XYZ the moon"; 
var sub = str.replace(/^.*ABC(.*)XYZ.*$/m, '$1'); 

La idea es que estés usando un String.replace con una expresión regular que coincide con sus delimitadores de apertura y cierre, y la sustitución de toda la cadena con la parte compensada entre los delimitadores.

El primer argumento es una expresión regular. El m posterior provoca que coincida con varias líneas, lo que significa que el texto entre ABC y XYZ puede contener líneas nuevas. El resto se descompone de la siguiente manera:

  • ^ inicio al comienzo de la cadena
  • .* una serie de 0 o más caracteres
  • ABC su delimitador de apertura
  • (.*) coinciden con una serie de 0 o más caracteres
  • XYZ su delimitador de cierre
  • .* una serie de 0 o más caracteres
  • $ coincidencia con el final de la cadena

El segundo parámetro, la cadena de reemplazo, es '$ 1'. replace sustituirá en submatch entre paréntesis de su exprsesion regular - la parte (.*) de arriba. Por lo tanto, el valor de retorno es la cadena completa reemplazar con las partes entre los delimitadores.

+0

Pensé que jQuery tiene funciones: subcadena e indexof, y que estos podrían ser utilizados juntos para obtener la subcadena. – Steve

+0

Podría explicar brevemente cómo funciona esto: str.replace (/^.* ABC (. *) XYZ. * $ /, '$ 1'); – Steve

+0

@Steve - Es JavaScript que tiene funciones como subcadena e indexof. jQuery se ocupa principalmente del DOM de una página. –

3

Puede que no necesite usar jQuery en este caso. Me gustaría hacer algo como esto:

function between(str, left, right) { 
    if(!str || !left || !right) return null; 
    var left_loc = str.indexOf(left); 
    var right_loc = str.indexOf(right); 
    if(left_loc == -1 || right_loc == -1) return null; 
    return str.substring(left_loc + left.length, right_loc); 
} 

No se garantiza que el código anterior es libre de errores, pero la idea es utilizar la función estándar substring(). Según mi experiencia, estos tipos de funciones funcionan igual en todos los navegadores.

+0

¡Gracias por la ayuda! – Steve

+0

me gusta esta porque odio la expresión regular, me pregunto si esa es una buena razón :) – henrijs

0

Solo para mostrarle cómo usaría jQuery y meagar's regex. Digamos que usted tiene una página HTML con el P etiqueta siguiente:

<p id="grabthis">The ABC cow jumped over XYZ the moon</p> 

para agarrar la cuerda, se utilizaría la siguiente mezcla jQuery/JavaScript (suena un poco estúpido, ya que jQuery es Javascript, pero véase jQuery como una biblioteca JavaScript DOM):

$(document).ready(function() { // Wait until the document has been fully loaded 
    var pStr=$("#grabthis").text(); // Grab the text from the P tag and put it into a JS variable 
    var subStr=pStr.replace(/^.*ABC(.*)XYZ.*$/m, '$1'); // Run the regex to grab the middle string 

    alert(subStr); // Output the grabbed middle string 
}); 

O la versión más corta:

$(document).ready(function() { 
    alert($("#grabthis").text().replace(/^.*ABC(.*)XYZ.*$/m, '$1')); 
}); 

la reemplazar la función es una función de JavaScript. Espero que esto aclare la confusión.

1

Meagar, su explicación es genial, y explica claramente a quién le funciona.

Sólo unas pocas preguntas de menor importancia:

  • son el paréntesis() se requiere sólo como una manera de indicar un subcoincidencia en el segundo parámetro de la función relpace o serían esto también identificar los subcoincidencias:/^. *A B C. XYZ. $/pero no funciona para lo que estamos tratando de hacer en este caso?

  • ¿Este expresiones regulares tienen 7 subcoincidencias:...

^
*
ABC
*
XYZ
*
$

  • ¿El $ 1 significa usar el fi ¿primer submatch entre paréntesis? Al principio pensé que podría significar usar la segunda subcoincidencia de la serie (la primera es $ 0).

Gracias,

Steve

Cuestiones relacionadas