Mi cadena tiene dos partes y está separada por /

Quiero lado izquierdo cadena de barra acepte cualquier cadena excepto "HAHAHA" fin de palabra Y la cadena de barra derecha acepta cualquier cadena y permite el uso "HAHAHA" al final de la cadena

solo mediante Regular Expression y match funcionan para devolver partes de resultados

Por ejemplo:

Aceptar : fooo/baarHAHAHA

Rechazar : fooHAHAHA/baaar

Quiero que si la cadena tiene una parte, por ejemplo baarHAHAHA, acepte pero resulte así:

cadena: baarHAHAHA

Grupo1: empty

Grupo2: baarHAHAHA

¿Tienes alguna idea?

0
Ali smith 25 jun. 2020 a las 10:42

2 respuestas

var str, re;

function match(rgx, str) {
  this.str = str;
  this.patt = rgx
  var R = [], r;
  while (r = re.exec(str)) {
    R.push({
      "match": r[0],
      "groups": r.slice(1)
    })
  }
  return R;
}

str = `
fooo/baarHAHAHA
fooHAHAHA/baaar
/baar
barHAHAHA
barr/bhHAHAHA
`;

re = /(?<=\s|^)(.*?)\/(.*?HAHAHA)(?=\s)/g;

console.log(match(re, str))

Referencia: https://developer.mozilla.org/en- US / docs / Web / JavaScript / Reference / Global_Objects / RegExp

Editar: cuando creo este código, creo que dejo que el usuario llame al str y cuando lo llame, devolverá los mactheds y grupos. Pero, si hago como this.str = str y tengo return también, this.str será rechazado.

0
Transamunos 26 jun. 2020 a las 22:01

No necesita regex para esto, lo cual es bueno ya que es bastante lento. Un simple string.split() debería ser suficiente para separar las partes. Luego puede verificar si la palabra contiene "HAHAHA" con el método string.endsWith().

const a = 'fooHAHAHA/bar';
const b = 'foo/bar';
const c = 'fooHAHAHA';

console.log(a.split('/')); // Array [ 'fooHAHAHA', 'bar' ]
console.log(b.split('/')); // Array [ 'foo', 'bar' ]
console.log(c.split('/')); // Array [ 'fooHAHAHA' ]

// therefore ...
function splitMyString(str) {
    const strSplit = str.split('/');
    if (strSplit.length > 1) {
       if (strSplit[0].endsWith('HAHAHA')) {
           return ''; // or whatever you want to do if it gets rejected ...
       }
    }
    return str;
}

console.log('a: ', splitMyString(a)); // ''
console.log('b: ', splitMyString(b)); // foo/bar
console.log('c: ', splitMyString(c)); // fooHAHAHA

Solución alternativa no regex:

const a = 'fooHAHAHA/bar';
const b = 'foo/bar';
const c = 'fooHAHAHA';

function splitMyString(str) {
    const separator = str.indexOf('/');
    if (separator !== -1) {
      const firstPart = str.substring(0, separator);
      if (firstPart.endsWith('HAHAHA')) {
         return ''; // or whatever you want to do if it gets rejected ...
      }
    }
    return str;
}

console.log('a: ', splitMyString(a)); // ''
console.log('b: ', splitMyString(b)); // foo/bar
console.log('c: ', splitMyString(c)); // fooHAHAHA
0
F. Müller 25 jun. 2020 a las 09:05