Javascript RegEx帮助

时间:2010-10-28 17:20:52

标签: javascript regex

我想采取像:

这样的字符串
  • 提交更改
  • 新建
  • 更新记录
  • 保存项目

并将它们转换为:

  • 提交更改
  • 创建新
  • 更新记录
  • 保存项目

具有如下功能:

var ConvertToProgressivePresent = (function(){
    // cache this regex
    var rProgressivePresent = /\b(?:(Submi(t))|(Creat|Sav|Updat)e)\b/i;
    return function(phrase){
        return phrase.replace(rProgressivePresent, "$1$2$3ing");
    };
}());

以上正则表达式有效,但似乎不是最好的方法。我不喜欢这里的分组,当匹配时,1-2组总是空的。

有任何建议或改进吗?

3 个答案:

答案 0 :(得分:2)

如果您有特定的单词替换,那么您可以创建一个单词库。将单词及其替换文件存储在对象中,然后循环遍历它。

var ConvertToProgressivePresent = (function() {
    var replaceValues = {
        "Submit": "Submitting",
        "Create": "Creating",
        "Update": "Updating",
        "Save": "Saving"
    }
    return function(phrase) {
        for (var item in replaceValues) {
            phrase = phrase.replace(item, replaceValues[item]);
        }
        return phrase;
    };
}());

这是JSFiddle Example

答案 1 :(得分:1)

我认为您应该可以使用CASE语句。正则表达式不是最有效的做事方式......这可能是最好的,因为它不会让你知道那句老话。

  哇,我有这个问题......我知道,我会用正则表达式......好吧,现在你有两个问题90)

答案 2 :(得分:0)

首先,在我看来你的正则表达式并不是你想要的,因为在将提交更改为提交时我没有看到第二个“t”。

但是,我认为无论如何我都不会使用正则表达式执行此任务。如果您只是尝试将一个单词替换为另一个单词,并且该单词始终位于该单词的开头,我可能会执行以下操作:

function ReplaceIfBeginsWith(wholeString, checkFor, replaceWith)
{
    if (wholeString.indexOf(checkFor + ' ') == 0)
    {
        return replaceWith + ' ' + wholeString.substr(checkFor.length + 1);
    }
    if (wholeString == checkFor)
    {
        return replaceWith;
    }
    return wholeString;
}

然后,您可以使用要替换的每个单词调用该函数。如果您想要不区分大小写,请检查所有字符串的小写版本。