2010-11-25 8 views
2

Je veux essayer de détecter les différentes parties du nom d'une personne dans Javascript, et les découper pour que je puisse les passer sur quelque chose autre.Javascript Expression régulière pour tenter de diviser le nom en Titre/Prénom (s)/Nom

Les noms peuvent apparaître dans tous les formats - par exemple: -

miss victoria mj Laing

  • Mlle Victoria CJ à long
  • Bob Smith
  • Fred
  • M. Davis

Je veux essayer d'écrire s lya quelque chose simple, ça va le faire, il est préférable de deviner ces derniers et les obtenir à droite 80% du temps ou si (Nous avons des données extrêmement louches)

Je pense à quelque chose le long des lignes de l'utilisation d'une expression rationnelle pour vérifier si elle a un préfixe, puis bifurquer à deux endroits pour savoir si elle a

/^(Dr|Mr|Mrs|Miss|Master|etc).?/

et puis couper le reste en utilisant quelque chose comme

/(\w+)+(\w+)/ 

pour correspondre nom et d'autres noms. Cependant, je ne suis pas sûr de mes options gourmandes/non grasses ici, et si je peux faire quelque chose à raccourcir ayant tous les chemins différents qui pourraient être disponibles. Fondamentalement, en espérant trouver quelque chose de simple, cela fait du bon travail.

Il faut aussi écrire en Javascript, en raison des limitations de l'outil ETL que j'utilise.

+3

je devais faire un travail similaire une fois. Je pense que vous êtes sur une cachette à rien. Le Sgt-major Antony 'Tom O'Reilly, III. Herr Docktor Docktor A R Weiss (avec le symbole bêta pour ss). Lance Copale intérimaire Anne-Marie M Johnson. MP Smith, Ph.D., M. John Taylor III, Toshiba-san, M. Park Young-June (l'Américain avec le nom de famille Young-June). M. Park Young-June (le Coréen avec le nom de famille Park), MA John Reynolds, Jr –

+0

Ce que @Paul a dit, si - comme vous le dites - vous avez des données extrêmement douteuses, je doute que vous atteigniez 80% , et vous n'aurez même pas un moyen fiable de savoir quel pourcentage est juste - sauf vérifier manuellement ... – Benjol

+1

"Salut, je m'appelle Zhang Yi Jiang Mon nom est Zhang, mon premier est Yi Jiang. faire?" "Arrrrhhhh !!!" * (indice: J'espère que vos données ne contiennent pas trop de noms asiatiques) * –

Répondre

2

Pourquoi ne pas split() et il suffit de vérifier les pièces résultantes:

// Split on each space character 
var name = "Miss Victoria C J Long".split(" "); 

// Check the first part for a title/prefix 
if (/^(?:Dr|Mr|Mrs|Miss|Master|etc)\.?$/.test(name[0])) { 
    name.shift(); 
} 

// Now you can access each part of the name as an array 

console.log(name); 
//-> Victoria,C,J,Long 

travail de démonstration: http://jsfiddle.net/AndyE/p9ra4/

Bien sûr, cela ne fonctionnera pas autour de ces autres questions ont mentionné dans les commentaires, mais vous auriez encore plus de difficultés à résoudre ces problèmes avec une seule regex.

1
var title = ''; 
var first_name = ''; 
var last_name = ''; 
var has_title = false; 

if (name != null) 
{ 
    var new_name = name.split(" "); 

    // Check the first part for a title/prefix 
    if (/^(?:Dr|Mr|Mrs|Miss|Master)\.?$/i.test(new_name[0])) 
    { 
     title = new_name.shift(); 
     has_title = true; 
    } 
    if (new_name.length > 1) 
    { 
     last_name = new_name.pop(); 
     first_name = new_name.join(" "); 
    } 
    else if(has_title) 
    { 
     last_name = new_name.pop(); 
    } 
    else 
    { 
     first_name = new_name.pop(); 
    } 
} 

Adapté de Acceptées réponse :)

+0

Content de vous aider :-) –

Questions connexes