匹配关键字和提取行

时间:2017-12-28 16:15:32

标签: javascript regex

我有一个textarea,用户将输入多行输入文本,我想逐行浏览并查找特定的关键字。找到关键字后,我想从该关键字中提取,直到该行结束(即到达新行)。

我有以下代码但它只提取Sender:作为警报执行时的输出。我并不熟悉JavaScript,所以我真的很欣赏比这更优雅的方法。

function processFunction() {
    var lines = document.getElementById("textarea").value.split('\n');
    for(var i = 0;i < lines.length;i++){
        extractSenderIP(lines[i]);
    }
}

function extractSenderIP(someText) {

  var re = new RegExp( "Sender:", "g" );
  var result = re.exec(someText);
  alert(result);
}

3 个答案:

答案 0 :(得分:2)

你的正则表达式只是寻找单词&#34; Sender:&#34;。你需要告诉它找到Sender:后面跟着下一个新行char:

 var re = new RegExp( "Sender:.*\n", "g" );

那时,你甚至不需要围绕线进行迭代。全局正则表达式应该找到所有实例并将它们返回到集合中。

答案 1 :(得分:1)

由于您已经通过换行符split('\n') split,因此您可以检查您的关键字是否匹配,然后获取如下所示的行:

Sender:.*

  • 匹配Sender:
  • 匹配任何字符零次或多次.*

举个例子:

&#13;
&#13;
function processFunction() {
    var lines = document.getElementById("textarea").value.split('\n');
    for(var i = 0;i < lines.length;i++){
        extractSenderIP(lines[i]);
    }
}

function extractSenderIP(someText) {
    var re = new RegExp("Sender:.*", "g" );
    var result = re.exec(someText);
    if (result && result[0]) {
        console.log(result[0]);
    }
}

processFunction();
&#13;
<textarea rows="4" cols="50" id="textarea">
Sender:test1
Sender:test1 Sender:test2
Sender: test2
test3</textarea>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

re.exec会返回一个具有index属性的对象,因此您可以执行以下操作:

result = re.exec(someText);
alert(someText.substring(result.index))