javascript正则表达式的问题:正好替换这个字母数

时间:2011-10-18 16:16:36

标签: javascript regex

我在javascript中定义正则表达式时遇到问题。我想用this format中的字符串替换this other format中的格式字符串(即“dd / mm / yy”)(即“dd / MM / yyyy”)。我的问题是如何使用javascript正则表达式。例如,如何转换年份?我一直试图用这些表达式进行转换:

f1 = "dd/mm/yy";
f1 = f1.replace(/[^y](yy)[^y]/g, 'yyyy');
f1 = f1.replace(/[^y](y)[^y]/g, 'yy');

有了这个,我试图将所有'yy'转换为'y'并不被'yyyy'所覆盖,然后单独'y'做同样的事情,但我不知道怎么说“ yy not not任何y “。

2 个答案:

答案 0 :(得分:1)

y之前对字符进行分组,然后使用$1返回给它。 “之前的角色”可以是y以外的任何东西。它也被允许在y之前没有任何内容,因此|^ 通过(?!y)为您的模式添加前缀,这意味着“如果下一个字符不等于y则匹配。

将两者加在一起:

f1 = "dd/mm/yy";
f1 = f1.replace(/([^y]|y)yy(?!y)/g, '$1yyyy');
f1 = f1.replace(/([^y]|^)y(?!y)/g, '$1yy');

答案 1 :(得分:0)

如果你想要恰好匹配两个'y',那么使用/\by{2}\b/ \b是一个单词边界,它将包括字符串的开头,字符串的结尾和你的'/'(等等)。