Javascript - 搜索字符串中使用的特定字符

时间:2012-10-18 06:57:03

标签: javascript regex

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

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)

这是唯一的出路吗?上面的正则表达式仍然可以改进吗?

3 个答案:

答案 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] +" ";
}