2017-01-03 2 views
0

Ich versuche, mit einem regulären Ausdruck zu kommen, den folgenden einfängt:javascript regex Backslash Ausgabe

var testString = "one . one\.two . one\.two\.three" ; 
testString.match(/(\\\.)|([^\.\[\]\s]+)/g ); 

oder vielleicht mit doppelseitigem Schrägstrich:

var testString = "one . one\\.two . one\\.two\\.three" ; 
testString.match(/(\\\.)|([^\.\[\]\s]+)/g ); 

und ergäbe:

ein

eins \ .two

ein \ .two \ .Drei

oder noch besser, die Beseitigung der Schrägstriche:

ein

one.two

one.two.three

Aber ich bin mir nicht sicher wie man nach einem Punkt sucht, aber einen nach einem Backslash folgenden Punkt ignoriert.

Mit anderen Worten, ich versuche manuell einen Objektpfad zu erstellen. wenn der Weg etwas sah wie folgt aus:

myObject.one.one_two.one_two_three

wäre es einfach, aber mein Objektebene-Namen haben Periode Zeichen in ihnen.
Ich versuche also, eine Zeichenfolge nach Perioden zu teilen, die nicht rückgestrichen sind.

Ich hoffe, das macht Sinn. Danke euch allen.

+1

Die Backslashes in der ursprünglichen Zeichenfolge sind nur in Ihrer Notation vorhanden, nicht in der tatsächlichen Zeichenfolge. Ob Sie sie aus der ursprünglichen Zeichenfolgenschreibweise entfernen oder nicht, es ist dieselbe Zeichenfolge. Es gibt also keine Möglichkeit zu erkennen, ob Sie einen Backslash in Ihrer Notation haben oder nicht.Wenn Sie sie in Ihrer Zeichenkette haben wollen, müssen Sie sie in Ihrer Notation verdoppeln. – trincot

+2

Ist etwas falsch mit 'testString.split (/ \ s + \. \ S + /)'? Um dann die umgekehrten Schrägstriche zu entfernen (wenn sie physische Backslashes sind), '.map (x => x.replace (" \\ "," "))? Übrigens, gibt es einen Grund, warum Sie sich auf Rückwärtsreferenzen im Titel beziehen Post-Punkt, aber was ist der Zweck von 'String()' hier? –

+0

Wie @trincot weist darauf hin, müssen Sie zwischen der Verwendung eines umgekehrten Schrägstrichs in der Notation für ein String-Literal zu entkommen Zeichen unterscheiden, und tatsächliche umgekehrte Schrägstriche in der Zeichenkette. Die Zeichenfolgenliteralschreibweise 'var testString =" eins. eins \ .zwei. eins \ .zwei \ .three ";' ergibt eine Zeichenkette "eins. eins. zwei. eins. drei." Die String-Literalnotation 'var testString =" Eins. Eins \\ Zwei. Eins \\. Zwei \\. Drei ";' ergibt eine Zeichenkette 'Eins. Eins \ .zwei. Eins \ .zwei \ .drei' , wobei die umgekehrten Schrägstriche tatsächliche Backslash-Zeichen innerhalb des String-Wertes sind. –

Antwort

1

Wenn Sie das Original haben wörtliche Schrägstriche in ihnen beabsichtigen, müssen Sie sie in Ihrer Zeichenkette Notation zu entkommen, wie folgt aus:

var testString = "one . one\\.two . one\\.two\\.three" ; 

Ich nehme an, das ist, was Sie wollten.

Wenn die Teile immer durch Leerzeichen getrennt sind, ist es einfacher, die Zeichenfolge einfach aufzuteilen.

Falls dies nicht für Sie geeignet (Ihr allgemeines Muster ist nicht immer so, und/oder Sie es wirklich brauchen ein regulärer Ausdruck zu sein), können Sie diese Variante Ihrer regex verwenden:

/(\\\.|[^\s\.\\])+/g 

var testString = "one . one\\.two . one\\.two\\.three" ; 
 
console.log('input:', testString); 
 

 
var result = testString.match(/(\\\.|[^\s\.\\])+/g); 
 

 
// Show result: 
 
for (var match of result) { 
 
    console.log('output:', match); 
 
}

können Sie die Schrägstriche entfernen danach mit match.replace(/\\\./g, '.') in dem obigen Code.

+0

danke. nicht zu prahlen, aber ich war ziemlich nah an meiner Antwort. Space-Dot-Space war nur da, um es lesbarer zu machen. – edwardsmarkf

+0

Tatsächlich warst du nah dran. ;-) – trincot