Así que necesito dividir una expresión regular que proviene de mi base de datos. El valor es como el siguiente
regexValue = '/^([0-9]{3}\.?[0-9]{3}\.?[0-9]{3}\-?[0-9]{2}|[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}\/?[0-9]{4}\-?[0-9]{2})$/ig'
si analiza a fondo esta expresión regular, puede ver que tiene una barra inclinada '/' entre la expresión regular. Entonces, si quisiera dividirlo, usando
values.split('/');
Generaría más cadenas de las que me gustaría. Por ejemplo, una expresión regular simple
//would generate three values("", \w+ , ig) regexValue = '/\w+/ig' regexValue.split('/');
¿Hay alguna manera de que solo pueda dividir para obtener el primer y el último valor?
Si desea dividir esa cadena en el cuerpo de la expresión regular y sus banderas, puede hacerlo fácilmente con... una expresión regular. 😃
const parts = /^\s*\/(.*)\/(?:([az]*))\s*$/.exec(regexString); // A ^ // B ^^^ // C ^^ // D ^^^^ // E ^^ // F ^^^^^^^^^^^^ // G ^^^ // H ^
Ejemplo en vivo:
const regexString = '/^([0-9]{3}\\.?[0-9]{3}\\.?[0-9]{3}\\-?[0-9]{2}|[0-9]{2}\\.?[0-9]{3}\\.?[0-9]{3}\\/?[0-9]{4}\\-?[0-9]{2})$/ig'; const parts = /^\s*\/(.*)\/(?:([az]*))\s*$/.exec(regexString); if (!parts) { console.log("No match"); } else { const [, body, flags] = parts; console.log(`body: ${body}`); console.log(`flags: ${flags}`); }
Tenga en cuenta que escapé de las barras diagonales inversas en el literal de cadena, ya que dijo que está leyendo esto desde su base de datos, no lo tiene en un literal de cadena en su código. Es solo que dentro de un literal de cadena, una barra invertida es un carácter de escape, por lo que \.
y .
significa exactamente lo mismo. Para escribir un literal de cadena que defina una cadena con barras invertidas, debe escapar de ellos como lo hice en el fragmento anterior. Una vez más, ha dicho que proviene de su base de datos, por lo que está bien, pero pensé que debería escaparlos en el ejemplo para evitar ser engañoso.