如何判断Javascript替换功能是否发生了替换?

时间:2015-06-03 09:51:49

标签: javascript jquery regex

我有一个扫描一系列字符串并替换它们的函数:

var nam = 'Here is a sample string 1/23';

var d   = new Date();
var mon = d.getMonth()+1;
var day = d.getDate();

nam = nam.replace(/\d{1,2}\/\d{1,2}/,day+'/'+mon);

但是,如果没有替换(因为在字符串中找不到正则表达式),我想将day+'/'+mon附加到字符串的末尾。

如何查看正则表达式匹配的数量?

3 个答案:

答案 0 :(得分:1)

你有几个选择。

您可以在执行替换之前先检查匹配,但替换它意味着再次评估正则表达式,这取决于正则表达式,可能相当昂贵:

var re = /\d{1,2}\/\d{1,2}/;

if (re.test(nam))
    nam = nam.replace(re, day+'/'+mon);
else
    nam += day+'/'+mon;

或者,如评论中所述,您可以替换字符串并将其与初始字符串进行比较 - 您只需将其放入临时变量中,几乎不需要任何费用:

var temp = nam.replace(/\d{1,2}\/\d{1,2}/, day+'/'+mon);

if (temp == nam)
    nam += day+'/'+mon;
else
    nam = temp;

答案 1 :(得分:0)

你可以先测试一下:

nam = /\d{1,2}\/\d{1,2}/.test(nam) ? nam.replace(/\d{1,2}\/\d{1,2}/,day+'/'+mon) : nam + day+'/'+mon;

答案 2 :(得分:0)

如果您想知道,是否更换了,而不是确切地说明了哪一部分:

temp_nam = nam.replace(/\d{1,2}\/\d{1,2}/,day+'/'+mon);
replaced = (temp_nam == nam) ? false : true;
--- more code ---
nam = temp_nam;

只需将替换的字符串存储在临时变量中,然后在检查实数变量后将其写入。