我有一个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);
}
答案 0 :(得分:2)
你的正则表达式只是寻找单词&#34; Sender:&#34;。你需要告诉它找到Sender:后面跟着下一个新行char:
var re = new RegExp( "Sender:.*\n", "g" );
那时,你甚至不需要围绕线进行迭代。全局正则表达式应该找到所有实例并将它们返回到集合中。
答案 1 :(得分:1)
由于您已经通过换行符split('\n')
split,因此您可以检查您的关键字是否匹配,然后获取如下所示的行:
Sender:.*
Sender:
.*
举个例子:
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;
答案 2 :(得分:0)
re.exec
会返回一个具有index
属性的对象,因此您可以执行以下操作:
result = re.exec(someText);
alert(someText.substring(result.index))