2017-04-12 6 views
0

Ich versuche, mit einem Regexp zu kommen, das erkennt, ob eine Zeichenfolge in Javascript getrimmt ist oder nicht. Das bedeutet, es hat keine Leerzeichen am Anfang oder Ende.Javascript: Erkennen, ob eine Zeichenfolge getrimmt ist

Bisher habe ich

^[^\s].*[^\s]$ 

Dies funktioniert, wenn die Zeichenfolge lang, aber für kurze Strings wie a, wird es nicht funktionieren, weil das Muster einen Nicht-Raum will, ein beliebiges Zeichen, dann eine andere nicht -Raum. Das a ist getrimmt, folgt aber nicht dem Muster.

Hilf mir, die richtige Regex zu finden.

+0

warum Regex übereinstimmen muss? IMO 'str.trim() === str 'ist besser lesbar – Kaiido

+0

Ich verwende hier keine imperative Programmierung. Deshalb muss ich eine Regex deklarieren. Genauer gesagt, verwende ich diese Regex in validate.js, einer Bibliothek, in der Sie Validatoren und Zeug angeben. Die Zeile, die du gesagt hast, würde hier nicht von Nutzen sein. –

+0

ok fair genug ... – Kaiido

Antwort

1

diese versuchen, eine zweite char optional zu machen:

^[^\s](.*[^\s])?$ 
+0

Wie erwartet von dem unglaublich tollen Marc Anton. Das funktioniert. –

+0

'regex.test ('a') wahre regex.test ('a ') wahre regex.test (' a')' true' das funktioniert nicht richtig! Es ist wahr, obwohl am Anfang oder am Ende ein Leerzeichen steht. –

+0

bearbeitet die Antwort. sollte jetzt funktionieren ... –

1

Eine Möglichkeit ist, nehmen Sie Ihre bestehende regex (^[^\s].*[^\s]$) und fügen Sie einen separaten Teil, um es speziell für einen einzelnen Nicht-Leerzeichen zu testen (^[^\s]$), die beiden Teile mit | Kombination:

/(^[^\s]$)|(^[^\s].*[^\s]$)/ 

Aber ich finde es manchmal einfacher ist, für den umgekehrten Fall zu testen und dann das Ergebnis mit ! invertieren.Also in Ihrem Fall hat den Regex Test für ein Leerzeichen am Anfang oder Ende:

!/(^\s)|(\s$)/.test(someString) 

in einer Funktion Encapsulated:

function isTrimmed(s) { 
 
    return !/(^\s)|(\s$)/.test(s) 
 
} 
 

 
console.log(isTrimmed(" a ")) // false 
 
console.log(isTrimmed("a ")) // false 
 
console.log(isTrimmed(" a")) // false 
 
console.log(isTrimmed("a"))  // true 
 
console.log(isTrimmed("abc")) // true 
 
console.log(isTrimmed("a b c")) // true 
 
console.log(isTrimmed(""))  // true

0

Sie können die unten regex verwenden:

^([\s]+[\w]*)?([\w]*[\s]+)?$ 
0

(?=^\S)[\W\w]*\S$

  • (?=^\S) Die Look-Ahead für Nicht-Leerzeichen am Anfang der Zeichenfolge (Spiele ohne die Zeichenfolge zu raubend; Spiel von der ersten Zeichen beginnen wieder wird)
  • [\W\w]* Spiel eine beliebige Anzahl von Zeichen
  • \S$ Spiel nicht-Leerzeichen am Ende der Zeichenfolge

Also für a:

  • (?=^\S) Spiele a am Anfang der Zeichenfolge (setzt die aktuelle Position auf den Anfang der Zeichenfolge zurück)
  • [\W\w]* Spiele keine Zeichen, wie es der nächste Teil
  • \S$ Spielen a am Ende des Strings
Verwandte Themen