计算值的出现次数,例如@@?

时间:2011-08-16 17:52:39

标签: javascript

我创建了一个可扩展的textarea。计算内容的字符数,并计算和修改文本区的行号。这非常有效。但是,当用户手动命中输入(单个字符)时,不会添加任何行。

我想更改它,以便用户可以通过在新段落之前添加@@来创建自己的段落。这将保存到数据库中。当我从数据库输出时,我会用<br /><br />替换@@。

这是我用来计算行数的函数:

function getRowCount(NumCharacters) {
    var NewRows = NumCharacters / 40;
    NewRows = parseInt(NewRows) + 1;
    return NewRows;
}

每行有40个字符。每次用户点击另外40个字符时,都会添加另一行。

在我的JavaScript中,当用户点击@@时,我需要在行数上添加一行。

如何使用JavaScript搜索并计算找到@@序列的次数?并每次添加一行?

++++++++++++++++++++++++++++++++++++++++++

我已经尝试了下面的一些答案。其中两个工作得很好,可读性和简单性。但是,两者都会产生一个我无法解决的错误。 Firebug告诉我:

ThisText.match(/@@/g) is null

是的,我知道它是空的。找不到@@。

这会引发错误:

var MyString = "Would you like to help me today?";
ExtraRows = MyString.match(/@@/g).length + 1;

这不会引发错误:

var MyString = "Would you like to @@help me today?";
ExtraRows = MyString.match(/@@/g).length + 1;

那么,如何在没有找到@@的情况下摆脱似乎发生的错误?

2 个答案:

答案 0 :(得分:3)

var str = "This is paragraph one@@and paragraph two@@and another";
var pcount = str.match(/@@/g).length;

答案 1 :(得分:2)

有多种方法可以做到:

// Simplest, suggested
var lines = (str.match(/@@/g) || []).length + 1;

// One silly variation
var lines = 1;
str.replace(/@@/g,function(){ lines++ })

// Another silly variation
for (var lines=1,r=/@@/g;r.exec(str);lines++){}

// aka...
var lines=1,r=/@@/g;
while(r.exec(str)){ lines++ }

顺便说一下,对于你的初始功能,我会把它简单地写成:

function getRowCount(charCount) {
  return Math.ceil(charCount/40);
}

修改:当str根本不包含@@时,我已用一种简单的内联方式更新了我的初始答案。