我正在尝试创建一个程序,允许我为数据库中的特定命令输入速记名称,如下所示:
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)
这是唯一的出路吗?上面的正则表达式仍然可以改进吗?
答案 0 :(得分:3)
您可以将单词边界移出更改
\b(I|AI|PK|VC|T|NN)\b
答案 1 :(得分:1)
是。您可以在javascript中使用String的replace
方法;
伪代码
newString = oldString.replace(regex, function(match, index){
// find `replacement` for `match`
return replacement;
})
答案 2 :(得分:1)
我宁愿使用split函数。如果你必须在正则表达式中添加一些内容,那么你描述它的方式似乎相当麻烦。
我会做类似
的事情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] +" ";
}