2017-03-20 3 views
2

Ich habe den Text:Wie kann ich den Platz überspringen, wenn der Abstand zwischen zwei Zeichen in JavaScript liegt?

first.getage() person.getinfo(tow.fff(one) , data) car.getcompany fff 

Ich möchte die Ausgabe erhalten:

first.getage()/person.getinfo(tow.fff(one) , data)/car.getcompany/fff 

mein Problem, wenn ich durch den Raum geteilt habe ich den Ausgang:

first.getage(/)/person.getinfo(/tow.fff(one)/data/,/)/car.getcompany/fff 

, was passieren weil ich Platz zwischen dem ("()") habe, so wie ich kann, um den Raum zu überspringen, wenn der Raum zwischen den Bögen kam, so ist die Ausgabe, die ich will, ist:

first.getage()/person.getinfo(tow.fff(one) , data)/car.getcompany/fff 

Hilfe?

+0

Was verwenden Sie? Regex? Teilt? – zer00ne

+0

Sieht so aus, als ob Sie nicht nach dem Leerzeichen trennen wollen. – Amy

+1

@tymeJV Ich denke, das '**' ist OPs fehlgeschlagen Format. – zer00ne

Antwort

0

Ok, ist das Ergebnis, was angefordert wird, aber daran erinnern, dass es auf die Suche in ein anderer Kontext als die Suche nach Bögen. Voraussetzung ist, dass die Saite zuerst getrimmt wird. Details werden in Snippet kommentiert.

SNIPPET

// Raw string 
 
var str = ' first.getage() person.getinfo(tow.fff(one) , data) car.getcompany '; 
 

 
// Trim the space off of th start and end of str 
 
var str = str.replace(/(^\s+|\s+$)/g, ''); 
 

 
/* This says: 
 
|| Find any literal fragment that is ".get" 
 
|| Then find everything that's a character before ".get"... 
 
|| until there's a space. 
 
|| Now replace that particular space with: 
 
|| a space,/, and another space 
 
*/ 
 
var rgx = /\s\b(?=\w*(?=\.get))/g; 
 

 
var res = str.replace(rgx, ' \/ '); 
 

 
console.log(res);

+0

Lesen Sie die Frage noch einmal und Sie werden sehen, dass das OP nach fff gefragt hat. Sie können also nicht alle basierend auf '.get' string –

+1

@NelsonTeixeira Warum lesen Sie die Änderungen nicht? Dieser fff wurde später hinzugefügt. Warum editierst du die OP-Zeichenfolge? Bindestriche in Leerzeichen? Das ändert die Frage vollständig. – zer00ne

+0

aber egal, auch wenn es nachträglich hinzugefügt wird, macht diese Antwort keinen Sinn, denkst du nicht? –

1

Ich habe versucht, eine Regex dafür zu erstellen und war nicht erfolgreich. Wenn jemand eine Regex machen kann, wird es natürlich viel besser sein. Aber wenn Regex uns nicht helfen kann, kommen wir zurück zu den alten Methoden. Also hier in einem altmodischen Stil geht:

function mySplitStr(str) { 
 
    var inFunction = 0; 
 
    str = str.trim().replace(/\s+/g,' '); 
 
    str.split('').forEach((chr, ix)=>{ 
 
    chr == '(' || inFunction++; 
 
    chr == ')' || inFunction--; 
 
    if ((chr == ' ') && (!inFunction)) 
 
     str = str.substr(0, ix) + '|' + str.substr(ix + 1); 
 
    }); 
 
    return str.split('|'); 
 
} 
 

 
var str = " first.getage() person.getinfo(tow.fff(one) , data) car.getcompany fff " ; 
 
console.log(mySplitStr(str));

JSFiddle: https://jsfiddle.net/7jazt7y1/7/

+0

aber ich will um die Zwischenräume zwischen den Bögen zu speichern – kernal

+0

wird versuchen, es zu ändern –

+0

Nun ist es so, wie Sie es wollten :) –

0

i nicht von der Hinter erfassten Gruppe loswerden kann, aber ich dachte, es helfen könnte!

hier ist meine Lösung:

var str = " first.getage() person.getinfo(tow.fff(one) , data) car.getcompany fff "; 

// trim to remove spaces at the begining and at the end 
var output = str.trim().split(/[$\s]+(\w+(?:\.\w+)?(?:\((?:[\s\.\w\(\),]*)\))?)\s*/); 

// output = ["first.getage()", "person.getinfo(tow.fff(one) , data)", "car.getcompany", "fff", ""] 
+0

In der [$ \ s] ist $ char ein Tippfehler? Wenn nicht, könntest du es erklären? –

Verwandte Themen