javascript - 正则表达式内的计算

标签 javascript jquery regex variables replace

我有一个疯狂的想法。

我想在正则表达式中进行计算,但我不确定是否可行。基本上我有一句话说:

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 ',并且被传递给.replaceparseInt('$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/

相关文章:

javascript - React Native ScrollView - 如何从另一个子组件按钮滚动到子组件?

javascript - 如何一个接一个地运行一个脚本?

正则表达式删除具有特定符号的连续行

javascript - 平滑滚动到内部链接的最佳方法

javascript - 当 child 或孙子使用 jQuery 处于事件状态时保持菜单打开

java - 从以 "name:"开头的字符串中获取参数

java - 正则表达式阻止某些特殊字符

javascript - 有没有方便的 html-parser 可以在 Nativescript 中使用

javascript - 我应该将数据和方法放在嵌套组件中的哪里?

Javascript:单击元素一百万次的最快方法是什么