Hay muchas opciones en javascript, pero hay opciones en mecanografiado para buscar palabras en una cadena determinada:
Por ejemplo :
Para la lista: ['Mr', 'Mrs', 'FM.', 'Sir'] y una cadena llamada 'Sir FM. Sam Manekshaw' . Tengo las palabras ' Señor ' y ' FM '. presente, por lo tanto, debe asignarse a una cadena y las partes restantes de la cadena deben asignarse a otra cadena. es decir:
a = Sir FM. b = Sam ManekshawNOTA : Debe validar solo palabras completas y no una subcadena.
ACTUALIZACIÓN : Lo que probé:
var tempPrefixList = ['Mr', 'Mrs', 'FM.', 'Sir']; var firstName = "Sir FM. Sam Manekshaw"; var prefixSearchExp = new RegExp(tempPrefixList.join("|"),"gi"); if(firstName && prefixSearchExp.test(firstName)) { console.log("Caught"); var requestFirstNameSplit = firstName?.split(" "); console.log("Prefix: " + requestFirstNameSplit[0]); console.log("First name: " + requestFirstNameSplit[1]); } Pero esto considera solo si el nombre tiene un prefijo. Y además, solo tiene un nombre en firstName. Por ejemplo: Sir Sam . Pero no funciona para el ejemplo que mencioné anteriormente.
Puedes resolverlo así:
class PersonDetails { formOfAddress: string; name: string; constructor(formOfAddress: string, name: string) { this.formOfAddress = formOfAddress; this.name = name; } get fullName(): string { return [this.formOfAddress, this.name].join(' '); } } function extractPersonDetailsFromFullName(fullName: string): PersonDetails { const formOfAddresses = ['Mr', 'Mrs', 'FM.', 'Sir']; let usedFormOfAddresses = []; const wordsInName = fullName.split(' ').filter((x) => x); for (const word of wordsInName ?? []) { if (formOfAddresses.filter((foa) => foa == word).length == 1) { usedFormOfAddresses.push(word); } } const formOfAddress = usedFormOfAddresses.join(' '); return new PersonDetails( formOfAddress, fullName.substr(formOfAddress.length).trim() ); } const testNames = ['Sir FM. Sam Manekshaw', 'Mr Tom']; for (const testName of testNames) { const personDetails = extractPersonDetailsFromFullName(testName); appDiv.innerHTML += testName + ' => <br> ' + JSON.stringify(personDetails) + '<br><br>'; }Código: https://stackblitz.com/edit/typescript-iyk3ul?file=index.ts
Si no quiere usar la implementación con la función y el objeto separados, puede usar el siguiente código:
const fullName = 'Sir FM. Sam Manekshaw'; const formOfAddresses = ['Mr', 'Mrs', 'FM.', 'Sir']; let formOfAddressParts = []; let nameParts = []; const wordsInName = fullName.split(' ').filter((x) => x); for (const word of wordsInName ?? []) { if (formOfAddresses.filter((foa) => foa == word).length == 1) { formOfAddressParts.push(word); } else { nameParts.push(word); } } let formOfAddress = formOfAddressParts.join(' '); let name = nameParts.join(' '); console.log('formOfAddress: ', formOfAddress); console.log('name: ', name);