javascript - online - probar expresiones regulares
¿Cómo hacer que la expresión regular no sea codiciosa? (3)
Creo que sería así
takedata.match(/(/[.+/])/g);
el g
al final significa global, por lo que no se detiene en el primer partido.
Estoy usando jQuery. Tengo una cadena con un bloque de caracteres especiales (comienzo y final). Quiero obtener el texto de ese bloque de caracteres especiales. Usé un objeto de expresión regular para encontrar cadenas. ¿Pero cómo puedo decirle a jQuery que busque resultados múltiples cuando tengo dos caracteres especiales o más?
Mi HTML:
<div id="container">
<div id="textcontainer">
Cuộc chiến pháp lý giữa [|cơ thử|nghiệm|] thị trường [|test2|đây là test lần 2|] chứng khoán [|Mỹ|day la nuoc my|] và ngân hàng đầu tư quyền lực nhất Phố Wall mới chỉ bắt đầu.
</div>
</div>
y mi código de JavaScript:
$(document).ready(function() {
var takedata = $("#textcontainer").text();
var test = ''abcd adddb'';
var filterdata = takedata.match(/(/[.+/])/);
alert(filterdata);
//end write js
});
Mi resultado es: [| cơ thử | nghiệm |] thị trường [| test2 | đây là test lần 2 |] chứng khoán [| Mỹ | day la nuoc my |] . Pero este no es el resultado que quiero :(. ¿Cómo obtener [texto] para los tiempos 1 y [demo] para los tiempos 2?
Acabo de hacer mi trabajo después de buscar información en internet ^^. Hago un código como este:
var filterdata = takedata.match(/(/[.*?/])/g);
- mi resultado es: [| cơ thử | nghiệm |], [| test2 | đây là test lần 2 |] ¡ esto es correcto !. pero realmente no entiendo esto. ¿Puedes responder mi por qué?
Los modificadores de expresiones regulares no codiciosos son como sus contrapartes codiciosos, pero con un ?
siguiéndolos inmediatamente:
* - zero or more
*? - zero or more (non-greedy)
+ - one or more
+? - one or more (non-greedy)
? - zero or one
?? - zero or one (non-greedy)
Tienes razón en que la codicia es un problema:
--A--Z--A--Z--
^^^^^^^^^^
A.*Z
Si quiere hacer coincidir ambos A--Z
, tendría que usar A.*?Z
(el ?
hace que el *
" sea reacio "o flojo).
Sin embargo, a veces hay mejores formas de hacerlo, p. Ej.
A[^Z]*+Z
Utiliza la clase de caracteres negada y el cuantificador posesivo para reducir el retroceso y es probable que sea más eficiente.
En su caso, la expresión regular sería:
/(/[[^/]]++/])/
Lamentablemente, JavaScript regex no es compatible con el cuantificador posesivo, por lo que solo tendría que ver con:
/(/[[^/]]+/])/
Ver también
- regular-expressions.info/Repetition
- Ver: una alternativa a la pereza
- Comparación de sabores
Sumario rápido
* Zero or more, greedy
*? Zero or more, reluctant
*+ Zero or more, possessive
+ One or more, greedy
+? One or more, reluctant
++ One or more, possessive
? Zero or one, greedy
?? Zero or one, reluctant
?+ Zero or one, possessive
Tenga en cuenta que los cuantificadores reacios y posesivos también son aplicables a las construcciones de repetición finita {n,m}
.
Ejemplos en Java:
System.out.println("aAoZbAoZc".replaceAll("A.*Z", "!")); // prints "a!c"
System.out.println("aAoZbAoZc".replaceAll("A.*?Z", "!")); // prints "a!b!c"
System.out.println("xxxxxx".replaceAll("x{3,5}", "Y")); // prints "Yx"
System.out.println("xxxxxx".replaceAll("x{3,5}?", "Y")); // prints "YY"