2013-06-06 7 views
5

Ich habe den folgenden Text = "superilustrado e de capa dura?", Und ich möchte alle Leerzeichen zwischen Wörtern im Text finden. Ich verwende den folgenden Ausdruck = [\\p{L}[:punct:]][[:space:]][\\p{L}[:punct:]]. Der Ausdruck funktioniert gut, aber er kann den Raum zwischen den "e de" finden. Weiß jemand, was das Problem mit meinem regulären Ausdruck ist?Regulärer Ausdruck, um Räume zu finden

Antwort

3

Vielleicht bin ich nicht Tracking, aber warum nicht einfach []?

13

Leerzeichen können einfach gefunden werden, indem Sie ein Leerzeichen in Ihre Regex setzen.

Whitespace kann mit \s gefunden werden.

Wenn Sie Leerzeichen zwischen Wörtern suchen möchten, verwenden Sie den Wortgrenzenmarker \b.

Dies würde einen einzigen Raum zwischen zwei Wörtern entsprechen.

"\b \b" 

(Der Grund fehlgeschlagen Ihr Spiel ist, dass \\p{L} den Charakter in einem Spiel enthält Weil e nur ein Zeichen ist, wird es durch die aufgegessen vorherige Spiel und nicht für den Raum nach e angepasst werden kann. \b vermeidet dieses Problem, weil es eine Null-Breite Übereinstimmung vorhanden ist.)

+0

Dank, Ihre Erklärung Sinn macht. Jedoch, wenn ich den Ausdruck mit einem Text verwende, der Interpunktion hat, "Já imaginou seu filho publicarum livro de Verdade, superilustrado und de capa dura? Então, ist ein vorbereitendes Fest des lançamento destes bestseller! Seu filho vai ter um livro escrito e ilustrado por ele mesmo! ", findet es nicht alle Räume. Gibt es eine Möglichkeit, einen anderen Ausdruck aufzunehmen, der sich um Interpunktion kümmert? – Aldo

+1

@Aldo, warum nicht einfach nach allen Leerzeichen in der Zeichenfolge suchen? Gibt es andere Leerzeichen, die nicht übereinstimmen sollen? –

0
// Setup 
var testString = "How many spaces are there in this sentence?"; 

// Only change code below this line. 

var expression = /\s+/g; // Change this line 

// Only change code above this line 

// This code counts the matches of expression in testString 
var spaceCount = testString.match(expression).length;