test - validate regex javascript




Javascript regex multiline flag no funciona (3)

Escribí una expresión regular para recuperar la cadena de html, pero parece que el indicador de multilínea no funciona.

este es mi patrón y quiero obtener el texto en la etiqueta h1.

var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi
m = html.search(pattern);
return m[1];

He creado una cadena para probarlo. Cuando la cadena contiene "\ n" el resultado es siempre nulo. Si quito todos los "\ n", me dio el resultado correcto, sin importar con o sin el indicador / m.

¿Qué pasa con mi expresión regular?


Desea que el modificador s (dotall), que aparentemente no existe en Javascript, puede reemplazar . con [\ s \ S] como lo sugiere @molf. El modificador m (multilínea) hace que ^ y $ coincidan las líneas en lugar de toda la cadena.


El modificador dotall realmente lo ha convertido en JavaScript en junio de 2018, es decir, ECMAScript 2018.
https://github.com/tc39/proposal-regexp-dotall-flag

const re = /foo.bar/s; // Or, `const re = new RegExp('foo.bar', 's');`.
re.test('foo\nbar');
// → true
re.dotAll
// → true
re.flags
// → 's'

[\s\S] no me funcionó en nodejs 6.11.3. Basado en la documentación RegExp , dice usar [^] que funciona para mí.

(El punto, el punto decimal) coincide con cualquier carácter único, excepto los terminadores de línea: \ n, \ r, \ u2028 o \ u2029.

Dentro de un conjunto de caracteres, el punto pierde su significado especial y coincide con un punto literal.

Tenga en cuenta que el indicador multilínea m no cambia el comportamiento del punto. Por lo tanto, para hacer coincidir un patrón en varias líneas, se puede usar el conjunto de caracteres [^] (si no quiere decir una versión antigua de IE, por supuesto), coincidirá con cualquier carácter, incluidas las nuevas líneas.

Por ejemplo:

/This is on line 1[^]*?This is on line 3/m

donde el *? es el acaparamiento no codicioso de 0 o más apariciones de [^].







regex