(JavaScript) Entonces, necesito una función checkString(str, substr) que verifique si una cadena está hecha de múltiples ocurrencias de una subcadena dada.
Ejemplos:
checkString("abc", "abc") -> true
checkString("abcabcabc", "abc") -> true
checkString("abcdef", "abc") -> false
checkString("abcab", "abc) -> true
podria alguien ayudarme?
Si los espacios en blanco no importan, esta es una solución:
const checkString = (bigString, subString) => { const split = bigString.split(subString); const onlyOccurances = split.filter(v => v === ''); return split.length === onlyOccurances.length } checkString("abc", "abc") // true checkString("abcabcabc", "abc") // true checkString("abcdef", "abc") // false bigString.split(subString) dividirá la cadena grande en una matriz de cadenas vacías si hay una coincidencia perfecta, y su longitud será exactamente cuántas ocurrencias hay. Si alguno de los valores de la matriz no son cadenas vacías, significa que no hay una coincidencia perfecta, por lo que habrá una diferencia entre la longitud de los valores filtrados por vacío y la longitud de los valores divididos.
Espero que tenga sentido.
Este método devolverá un objeto y encontrado será verdadero si el valor se encuentra en la cadena y múltipleEncontrado será verdadero si se encuentra más de una vez;
const checkString = function(str, v) { let found = false, multi = false, index; index = str.indexOf(v); if (index !== -1) { found = true; index = str.indexOf(v, index + v.length); if (index !== -1) { multi = true; } } return { found : found, multipleFound : multi };};
Esta sería una forma de comprobar el patrón abc :
const rx=/^(abc)+$/; console.log(["abc","abcabcabc","abcdef"].map(t=> `${t} ${rx.test(t)}`))