Quero testar se uma string contém SOMENTE substrings específicas (como palavras inteiras)/espaços
Escrevi algum código e funciona, mas estou preocupado que não seja muito eficiente
Existe uma maneira mais eficiente de fazer isso?
Aqui está meu código ineficiente
const str1 = 'a♭ apple a a a a a apple a♭ a' // valid
const str2 = 'a♭ apple a a a a a apple a♭ aa' // invalid aa
const str3 = 'a♭ apple ad a a a apple a♭ a' // invalid ad
const allowedSubstrings = [
'a', 'a♭', 'apple'
]
const isStringValid = str => {
allowedSubstrings.forEach(sub => {
// https://stackoverflow.com/a/6713427/1205871
// regex for whole words only
const strRegex = `(?<!\\S)${sub}(?!\\S)`
const regex = new RegExp(strRegex, 'g')
str = str.replace(regex, '')
})
str = str.replaceAll(' ', '')
// console.log(str)
return str === ''
}
console.log('str1', isStringValid(str1))
console.log('str2', isStringValid(str2))
console.log('str3', isStringValid(str3))
Uma abordagem que posso imaginar (que evita complexidade
regex
) seria:words
array (criada pela divisão acima) está incluída noallowedSubstrings
array.Um único padrão de expressão regular que verifica se a string contém apenas as substrings especificadas como palavras inteiras ou espaços. Ele usa o
join('|')
método para criar um padrão de alternância (|
) para as substrings permitidas e, em seguida, testa a string em relação a esse padrão usandotest()
.