2012-10-18 164 views
0

我試圖創建一個程序,讓我來爲數據庫中的特定命令,像這樣的輸入簡寫名稱:使用Javascript - 搜索字符串中使用特定字符

ID I(20) AI NN PK, name VC(255), story T 

然後,我有地圖中,這些都是基於來自:

var keys = { 
     'PK' : 'PRIMARY KEY', 
     'FK' : 'FOREIGN KEY' 
    }; 

    var options = { 
     'AI' : 'AUTO_INCREMENT', 
     'NN' : 'NOT NULL', 
     'D' : 'DEFAULT', 
     'CT' : 'CURRENT_TIMESTAMP' 
    }; 

我已經是尋找存在於字符串簡寫名稱,然後在地圖中的值替換它的問題。

我能想到的唯一解決方案是使用正則表達式來查找字符串。

目前,我有這個正則表達式:

(\bI\b|\bAI\b|\bPK\b|\bVC\b|\bT\b|\bNN\b) 

這是唯一的出路?上面的正則表達式還可以改進嗎?

回答

1

我寧願使用分割功能。你描述的方式似乎很麻煩,如果你必須添加一些東西到正則表達式。

我會做這樣的事情

var shorthand = { 
    "XX":"XXXXXX" 
    ... 
}, 
my_string = "ID I(20) AI NN PK, name VC(255), story T", 
/* note that you can split using regexp like /\b/ if needed*/ 
splitted_str = my_string.split(" "), 
result_str = ""; 
for (var i =0; i< splitted_str.length; i++) { 
    /*You might want to use a regexp here to grab only the letters and still keep the parameters like the commas, parenthesis, number*/ 
    result_str += shorthand[splitted_str[i]] +" "; 
} 
/*And there you go, your request is in result_str.*/ 

編輯:用正則表達式的循環,以保持逗號等。請注意,如果您只想將大寫字母與splitted_str[i].match(/^([A-Z]+)(.*)$/);

var reResult; 
for (var i =0; i< splitted_str.length; i++) { 
    reResult = splitted_str[i].match(/^(\w+)(.*)$/); 
    result_str += shorthand[reResult[1]] + reResult[2] +" "; 
} 
1

是的。你可以在javascript中使用String的replace方法;

newString = oldString.replace(regex, function(match, index){ 
    // find `replacement` for `match` 
    return replacement; 
}) 
3

您可以將字邊界你的交替

\b(I|AI|PK|VC|T|NN)\b