我有一个疯狂的想法。
我想在正则表达式中进行计算,但我不确定是否可行。基本上我有一句话说:
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:');
因此,它会执行第一次替换,如果它是原始“类别”,它将不匹配,并将运行第二次替换。如果它确实匹配,我希望它将表达式末尾的数字加一。我想也许我可以对变量进行 parseInt() 并添加一个,但这不起作用,因为 parseInt('$3')
似乎返回 NaN 并且无法将该变量识别为整数。
我知道有很多其他方法可以做到这一点,但我只是偶然发现它,难倒了自己,并且总是喜欢找到一个好问题的答案......
有什么想法吗?谢谢!
最佳答案
与许多其他语言一样,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
的更多信息。 .
关于javascript - 正则表达式内的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662714/