0

我正在尝试创建一个程序,该程序允许我为数据库中的特定命令输入简写名称,如下所示:

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)

这是唯一的出路吗?上面的正则表达式还能改进吗?

4

3 回答 3

3

您可以将单词边界移出您的交替

\b(I|AI|PK|VC|T|NN)\b
于 2012-10-18T07:07:48.993 回答
1

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

伪代码

newString = oldString.replace(regex, function(match, index){
    // find `replacement` for `match`  
    return replacement;
})
于 2012-10-18T07:07:47.203 回答
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] +" ";
}
于 2012-10-18T07:11:40.490 回答