2009-11-05 21 views
11

bien, así que tengo este pequeño bloque de texto:Buscar texto entre 2 Cotizaciones con jQuery

function onfocus(event) { 
    if ($(this).val() == "Some Arbitrary Text") {$(this).val("");} 
} 

Usando jQuery o JavaScript, me gustaría encontrar teh "texto arbitrario". Este bloque de texto es constante, con la excepción del "Texto arbitrario". Idealmente, me gustaría una forma de analizarlo sin utilizar complicados bucles y expresiones regulares.

Para ayudar a aclarar: El hecho de que el texto es javascript no forma parte. Piense en ello como solo texto que estoy analizando. El "Texto Arbitrario" puede ser cualquier cosa, estoy tratando de encontrar el texto entre las 2 citas.

+0

el texto para buscar en (alias "el pajar") es en realidad todo el fragmento de código o la parte "Algunos textos arbitrarios"? – pixeline

+0

Estoy tratando de encontrar el "texto arbitrario" en todo el trozo de código –

+0

@downvoter, ¿por qué no dar una explicación de por qué usted downvoted para que pueda abordar la cuestión. –

Respuesta

20

No es que he entendido la pregunta por completo, pero tal vez

var s = 'foo "quoted" bar'; 
var m = s.match(/"(.*?)"/); 
alert(m[1]); // m[1] = quoted 

Por supuesto, esto también es posible sin expresiones regulares, pero sería no tiene sentido - esto es lo que son las expresiones regulares para

+0

acuerdo, aprender a usar expresiones regulares. – Beetny

+0

parece que la expresión regular es la única manera de hacerlo. pensé que sería más complicado que esto. ¿Cómo puedo obtener esto para devolver el texto sin las comillas? –

+0

@Russ: como por mi respuesta, para deshacerse de las cotizaciones:. String.Replace cadena = (/ "/ g, ''); –

0

Su pregunta es un poco confusa: ¿está buscando para ver si una cadena grande contiene una cadena más pequeña? Si es así, utilice la función indexOf así:

function onfocus(event) { 
    if ($(this).val().indexOf("Some Arbitrary Text") > 0) { 
     $(this).val(""); 
    } 
} 
+0

no, el texto arbitrario cambia. Necesito encontrarlo para evaluarlo. –

0
var stringToSearchFor = 'if ($(this).val() == "'; 
var haystack = 'put your javascript code here'; 

var startPosition = haystack.indexOf(stringToSearchFor); 
+0

Esto está cerca, pero tengo que tirar de que el texto fuera del bloque de código y ser capaz de ponerlo en una variable, pero esto me pone en el camino correcto –

0

Si estoy interpretando su pregunta correctamente, solo necesita una expresión regular:

astring = "oh hai I'm a string my name is \"Arbitrary Text\""; 
results = astring.match(/"[\d\w\s]*"/g); 

La expresión regular /"[\d\w\s]*"/ coincidirá con cualquier dígito, palabra o espacio en blanco que aparezcan entre las comillas. El sufijo g indica que la búsqueda es global y devuelve una matriz de todas las coincidencias. Eliminar el g simplemente devolverá el primer resultado.

En este caso match() devuelve una matriz de 1 miembro: ['"Arbitrary Text"']. Sí, incluye las comillas invertidas. Para eliminarlos: string = string.replace(/"/g, '');

Se devuelve un valor nulo si no se encuentran coincidencias en el texto.

Good javascript-regexp cheatsheet here.

Editar

Ahora que entendemos sus razones para hacer esto, tengo que recomendar en contra de este método.

Hay varias formas de comparar el texto de una entrada de formulario con su valor predeterminado. Podría almacenar el valor predeterminado en una variable JS global, por ejemplo, o como un atributo del elemento html mismo.

Eso no quiere decir que su método sea "incorrecto", pero este código tiene un serio aroma a él.

0

Supongo que realmente está mostrando algún tipo de mensaje de "invitación" dentro de un elemento de entrada como, por ejemplo: "ponga su nombre aquí" dentro de una entrada de texto. Por supuesto, desea que esta invitación desaparezca tan pronto como el usuario se concentre en esa entrada, y que vuelva a aparecer si el usuario no puso nada en la entrada. La intención es correcta, pero su enfoque es un poco sucio y poco confiable. Yo usaría variables en su lugar.

Dado que sus entradas se agregan dinámicamente, simplemente agregue la variable dentro de una etiqueta script < justo después de la inyección de html.por ejemplo:

document.write('<input id="controller24" type="text" name="email" value="Put your name here"/><script>var controller24Default="Put your name here";</script>'); 

Después de eso, se debe unir ese controlador de una función genérica que reconstruir la variable por defecto del valor de ID de entrada. var thisDefaultValue = eval("controller"+this.id+"Default"). Solo una idea.

1
var text = $(this).val().replace(/"(.*?)"/ig, "$1");