我想采取像:
这样的字符串并将它们转换为:
具有如下功能:
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组总是空的。
有任何建议或改进吗?
答案 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;
};
}());
答案 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;
}
然后,您可以使用要替换的每个单词调用该函数。如果您想要不区分大小写,请检查所有字符串的小写版本。