0

我有以下文字:

var text= 
    "The sad sad man uses a bat to swing the bats 
    away from his sad garden .
    Sadly he doesn't succeed. "

假设我想搜索这个词"sad"

var match;
re = /sad/g,
    match;
while (match = re.exec(text)) {
    console.log(match); 
match.poz = ....
}

我怎样才能成为一个从 0,0 开始match.poz的元组(数组) ?[line,position on the collumn]

例如。

  • 1 场比赛 --> match.poz = [0,4]
  • 2 匹配 --> match.poz = [0,8]
  • 3 场比赛 --> match.poz = [1,14]
  • 4 匹配 --> match.poz = [2,0]
4

2 回答 2

1

我能够构建一个简单的解析器,而不是使用正则表达式,我认为它不可能(没有很多帮助)在 Javascript 中获得位置。所有这一切都是通过线,一次一个字符,然后“窥视”前方以查看当前位置是否给出sad\n

var text = "The sad sad man uses a bat to swing the bats \naway from his sad garden .\nSadly he doesn't succeed.",
    length = text.length,
    matches = [],
    lines = 0,
    pos = 0;

for (var i = 0; i < length; i++){
    var word = text.substring(i, i + 3).toLowerCase();

    if (word == 'sad') {
        matches[matches.length] = [lines, pos];
    }

    if (word.indexOf('\n') == 0) {
        lines++;
        pos = 0;
    } else {
        pos++;
    }
}

console.log(matches);

这在 Firebug 控制台中为我提供了以下信息:

[[0, 4], [0, 8], [1, 14], [2, 0]]

http://jsfiddle.net/Zx5CK/1/

于 2012-05-27T23:01:52.340 回答
0

首先,我认为您需要能够以某种方式划界。可能在输入数据中使用了一些字符(例如 '\n')。那么解决问题的一种方法是使用 split 函数将每行中的单词作为数组获取。然后,您可以编写一个函数,该函数接收一行和所需的单词,并将每个单词与您正在搜索的内容进行比较。

 //where i denotes the currently read line.
 var indexInLine = checkforWordInLine(input.line[i].split(' '), "sad");
 if(indexInLine != -1) 
 //word found in line. 
 // save indexInLine and 'i', the line index      


 function checkforWordInLine(line, searchKey)
 {
    var wordIndex = -1;
   for(var i=0,j=line.length; i < j; i++)
   {
      if(line[i] === searchKey)
      wordIndex = i;
   }
   return wordIndex;
 }
于 2012-05-27T22:17:05.607 回答