In Javascript (nodejs) muss ich Textzeichenfolgen mit Unicode-Zeichen indizieren, d. H. Eine Zeichenfolge wie:

"Bonjour à tous le monde, 
je voulais être le premier à vous dire:
  -'comment ça va'
  -<est-ce qu'il fait beau?>" 

Ich möchte die folgenden Wörter erhalten:

 ["Bonjour", "à", "tous", "le", "monde", "je", "voulais", "être", ... "beau"]

Wie kann ich das mit Regex oder anderen Mitteln erreichen?

Ps: Ich habe das xregexp-Modul installiert und ausprobiert, das Unicode-Unterstützung für Javascript bietet, aber da ich mit Regexes im Allgemeinen völlig nutzlos bin, konnte ich nicht sehr weit gehen ...

3
Running Turtle 6 Dez. 2013 im 14:59

3 Antworten

Beste Antwort

Sie können die Version von XRegExp mit Addons verwenden, die (unter anderem) Unterstützung für Regex-Unicode-Kategorien bietet. Wir interessieren uns für die Kategorie not an unicode letter, die \P{L} ist. Sie können Ihre Zeichenfolge dann durch den regulären Ausdruck XRegExp("\\P{L}+") teilen.

var s="Bonjour à tous le monde,\nje voulais être le premier à vous dire:\n  -'comment ça va'\n  -<est-ce qu'il fait beau?>";
var notALetter = XRegExp("\\P{L}+");
var words = XRegExp.split(s, notALetter);

Siehe diese Geige.

1
halex 6 Dez. 2013 im 11:32

Eine Idee könnte sein, die Zeichenfolge durch die verschiedenen Zeichen zu teilen, die NICHT Teil von Wörtern sind, und dann leere Zeichenfolgen herauszufiltern:

var str = "Bonjour à tous le monde, je voulais être le premier à vous dire:  -'comment ça va'  -<est-ce qu'il fait beau?>";

var result = str.split(/[-:'"?\s><]+/).filter(function(item) { return item !== '' });
/*
["Bonjour", "à", "tous", "le", "monde,", "je", "voulais", "être", "le", "premier", "à", "vous", "ire", "comment", "ça", "va", "est", "ce", "qu", "il", "fait", "beau"]
*/

Ebenso könnten Sie anhand der oben negierten Zeichenklasse übereinstimmen und müssen keine leeren Zeichenfolgen filtern:

var result = str.match(/[^-:'"?\s><]+/g);
1
Tibos 6 Dez. 2013 im 11:12

Sie können wahrscheinlich die Bibliothek "uwords" verwenden - https://github.com/AlexAtNet/uwords. Es extrahiert Wörter aus dem Text, indem Zeichen aus L * Unicode-Gruppen gruppiert werden.

Es funktioniert ähnlich wie XRegExp("\\p{L}+"), ist aber extrem schnell.

Beispiel:

var uwords = require('uwords');
var words = uwords('Bonjour à tous le monde,\n' +
    'je voulais être le premier à vous dire:\n' +
    '-\'comment ça va\'\n' +
    '-<est-ce qu\'il fait beau?>');
console.log(words);

[ 'Bonjour',
  'à',
  'tous',
  'le',
  'monde',
  'je',
  'voulais',
  'être',
  'le',
  'premier',
  'à',
  'vous',
  'dire',
  'comment',
  'ça',
  'va',
  'est',
  'ce',
  'qu',
  'il',
  'fait',
  'beau' ]

P.S. Tut mir leid, dass ich zu spät komme - ich hoffe, es ist immer noch nützlich.

1
Alex Netkachov 2 Feb. 2014 im 05:03