2017-03-06 60 views
0

我想轉換一個字符串輸出尋找某種方式,我想最好的方式來做到這一點是使用模式匹配,但我遇到一些問題。我不想打斷字符串,然後連接它。我希望有一個更簡單的方法。我也有帶(ID)的問題似乎是後弦(ID)姓氏文字正在對替代值我想轉換一個字符串輸出尋找某種方式使用替換,但有問題

var myFunction - function(){ 
var str = "id,created,employee(id,firstname,employeeType(id), lastname),location"; 

var str2="id, created, employee"; 
var str3 = "(id,firstname,employeeType"; 
var str4="(id)"; 
var str5 ="lastname)"; 
var str6 = "location"; 


var test = str2.replace(/[,]/g, '<br>\r\n').split(","); 
var test1 = str3.replace(/[(/,]/g, '<br>-\r\n').split(","); 
var test2 =str4.replace(/[()/,]/g, '<br />--\r\n').split(","); 
var test3 = str5.replace(/[,/)]/g, '<br />').split(","); 
var test4 = str6.replace(/[)/,]/g, '<br />').split(","); 

var result =test + test1 + test2 + test3 + test4 ; 
var match = result.split(',')  

document.getElementById("myDemo").innerHTML = match.join("<br />");; 
} 
myFunction() 

我的輸出看起來像下面

id 
created 
employee 
- id 
- firstname 
- employeeType 
-- id 
-- lastname this should only be one dash not two 
location 

什麼時我做錯了?

回答

0

這是一種在一段時間內穿過字符串一個字符的方式。遇到()時,計數器會遞增或遞減,表示應該有多少個前面的-字符。

var stringFormatter = function() { 
    var str = "id,created,employee(id,firstname,employeeType(id), lastname),location"; 

    var formatted = ''; 
    var indentCount = 0; 
    var chars = str.split(''); 

    chars.forEach(function(char) { 
    if (char == '(') { 
     indentCount++; 
    } else if (char == ')') { 
     indentCount--; 
    } 
    if (char == ',' || char == '(') { 
     formatted = formatted.concat('<br/>'); 
     for (var i = 0; i < indentCount; i++) { 
     formatted = formatted.concat('-'); 
     } 
    } else if (char != '(' && char != ')') { 
     formatted = formatted.concat(char); 
    } 
    }); 

    document.getElementById("myDemo").innerHTML = formatted; 
} 

stringFormatter(); 

輸出看起來像:

id 
created 
employee 
-id 
-firstname 
-employeeType 
--id 
- lastname 
location 
0

對於任何嵌套層次您可以使用此

var myFunction = function(){ 
var str = "id,created,employee(id,firstname,employeeType(id), lastname),location"; 

while(/\([^()]+\)/g.test(str)) 
{ 
    m = /\(([^()]+)\)/g.exec(str); 
    m[1] = m[1].replace(/(-+)/g,"-$1"); 
    m[1] = m[1].replace(/,/g,"-"); 
    str = str.replace(/\(([^()]+)\)/,'-'+m[1]); 
} 

str = str.replace(/,/g,'<br>\r\n'); 
str = str.replace(/(-+)/g,'<br>$1 \r\n'); 

document.getElementById("myDemo").innerHTML += str + '</br>'; 

} 
myFunction(); 

輸出:

id 
created 
employee 
- id 
- firstname 
- employeeType 
-- id 
- lastname 
location 

中查看嵌套層次結果

var str = "id,created,employee(id,firstname,contact(Mobile,Landline(home,office)),employeeType(id), lastname),location"; 
... 

輸出:

id 
created 
employee 
- id 
- firstname 
- contact 
-- Mobile 
-- Landline 
--- home 
--- office 
- employeeType 
-- id 
- lastname 
location 
相關問題