Javascript对捕获的regexp执行算术

Javascript perform arithmetic on captured regexp

本文关键字:执行 regexp Javascript      更新时间:2023-09-26

我想把我的标题从默认的"*number* new messages | default"

这是我的代码,它从默认变为1 new messages很好,但它从来没有超过1。

title = $('title').text();
regexp = /^('d+)/
if (title.match(regexp))
  $('title').text().replace(regexp, (parseInt("$1")+1).toString())
else
  $('title').text('1 New Messages | Default')

您应该使用函数作为replace的第二个参数,您还需要设置新值:

var title = $('title').text();
$('title').text(title.replace(regexp, function(m) { return parseInt(m, 10) + 1) }));

并且,像往常一样,在调用parseInt时不要忘记基数参数,否则您迟早会感到不愉快。

我最近遇到了这个问题,这个问题与在替换函数的第二个参数内调用函数有关。$1只有在直接作为字符串字面值调用时才有效,而不是作为函数的字符串参数调用。

另一个问题是$('title').text().replace(regexp, (parseInt("$1")+1).toString())将返回一个字符串。你需要传递你想要分配文本的值作为text()函数的函数参数,就像你在else块中所做的那样。

试试这个:

title = $('title').text();
regexp = /^('d+)/
if (numToReplace = title.match(regexp))
  $(title).text(title.replace(regexp, (parseInt(numToReplace[1])+1).toString()))
else
  $('title').text('1 New Messages | Default')

和一个JSFiddle: http://jsfiddle.net/KFW4G/

replace返回一个新字符串,因此您必须再次使用text将文本设置为结果。