Javascript对捕获的正则表达式执行算术运算

时间:2011-09-24 21:21:18

标签: javascript jquery regex

我想将我的标题从默认值替换为"*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')

3 个答案:

答案 0 :(得分:3)

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

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

而且,像往常一样,当你打电话给parseInt时,不要忘记基数论点,否则你迟早会感到不快。

答案 1 :(得分:2)

我最近遇到过这个问题,问题是在replace函数的第二个参数中调用一个函数。 $ 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/

答案 2 :(得分:0)

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