我有一个疯狂的想法。
我想在正则表达式中进行计算,但我不确定它是否可行。基本上我有一句话说:
Category:
每次点击按钮,都会说:
Category:
Category 1:
Category 2:
等。我现在正在jQuery选择器上执行一系列函数:
var newHTML = selector.closest('.row').clone().html().replace(/(Category)(\s)(\d)/g,'$1$2' + (parseInt('$3') + 1)).replace('Category:','Category 2:');
所以它首先替换它,如果它是原始的'Category'它将不匹配并将运行第二次替换。如果匹配,我希望它将表达式末尾的数字增加1。我想也许我可以parseInt()变量并添加一个,但这不起作用,因为parseInt('$3')
似乎返回NaN并且不会将变量识别为整数。
我知道还有很多其他的方法可以做到这一点,但我偶然发现了它,难倒自己,总是想找到一个好问题的答案......
有什么想法?谢谢!
答案 0 :(得分:2)
与许多其他语言一样,JavaScript会在之前评估传递给函数的参数。因此,在您的情况下,'$1$2' + (parseInt('$3') + 1))
首先评估 ,这会产生字符串'$1$2NaN'
,而会将传递给.replace
。 parseInt('$3')
为NaN
,因为字符串'$3'
无法转换为数字:
> parseInt('$3')
NaN
如果要使用匹配项执行任何计算,则必须将函数作为第二个参数传递:
.replace(/(Category)(\s)(\d)/g, function(match, $1, $2, $3) {
return $1 + $2 + (parseInt($3) + 1));
})
(当然你可以根据需要命名参数)
您可以在MDN documentation中了解有关将回调传递给.replace
的详情。
答案 1 :(得分:1)
此外@ FelixKling的答案是一个工作演示,只是为了表明你可能做出的调整。
$('.cat').on('click', function() {
$(this).html(function(i,html) {
return html.replace(/(Category)(\s?)(\d*)/g, function(match, x, y, z) {
y = y || ' ';
z = z || 0;
return x + y + (+z + 1);
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="cat">Category</div>
<div class="cat">Goint with Category Blah Blah Blah</div>