2

我只需要找到不匹配字符串的第一行 - 这可能比找到所有字符串更容易。到目前为止,我发现的唯一解决方案是删除包含字符串的行,然后我选择其余的行。

例如,在以下文本中,我需要找到不包含字符串的行"line"- 那将是第四行:Lazy Bear.

一线
二线
三线
懒熊

测试它的最简单方法是在书签中,所以这里是:

var myText = "First line" + "\n";
var myText = myText + "Second line" + "\n";
var myText = myText + "Third line" + "\n";
var myText = myText + "Lazy Bear" + "\n";

var p = prompt("My Text = ", myText);

var x = myText.replace(/.*line.*/g, "");
var x = x.replace(/\n/g, "");
var p = prompt("Result:", x);

笔记:

  1. “提示”行仅用于调试目的

  2. 如果我在 Bookmarklets 中只使用“myvar=..”而不是“var myvar=..”,它将修改当前页面,打印变量。)

4

5 回答 5

4

正则表达式/^(?!.*line).*$/m匹配不包含模式“line”的行。

null如果没有这样的行,则返回以下代码,否则返回第一行:

myText.match(/^(?!.*line).*$/m);

完整的代码如下所示:

var x = (myText.match(/^(?!.*line).*$/m)||['no result found'])[0];
于 2013-02-19T00:45:40.850 回答
1

由于没有一个答案提到这一点:

str.match(/^(?!.*line).*$/gm);

m标志使^and$匹配一行的开头和结尾,而不是整个字符串。

由于.不匹配换行符,负前瞻包含在同一行中。

请注意,如果字符串以 结尾\n,则结果中的最后一个元素将有一个空字符串,这是完全正常的,因为该空字符串是单独的一行。如果您只想捕获非空字符串(即使在输入字符串的中间),那么您可以对正则表达式进行一些小改动:

str.match(/^(?!.*line).+$/gm);

*强制+正则表达式匹配非空行。

于 2013-02-19T04:31:22.667 回答
0

我跳过了提示内容,因为我不确定你在做什么。

var myText = "First line" + "\n";
var myText = myText + "Second line" + "\n";
var myText = myText + "Third line" + "\n";
var myText = myText + "Lazy Bear" + "\n";
var myTextAsArrayOfLines = myText.split("\n");
for(var i = 0; i < myTextAsArrayOfLines.length; i++)
{
  if(myTextAsArrayOfLines[i].indexOf("line") === -1)
  {
    window.alert("The first line that didn't contain 'line' was " + ((i + 1) + '');
    //end looping
    i = i.length;
  }
}
于 2013-02-19T00:32:59.803 回答
0
var myText = "First line" + "\n";
var myText = myText + "Second line" + "\n";
var myText = myText + "Third line" + "\n";
var myText = myText + "Lazy Bear" + "\n";
var p = prompt("My Text = ", myText);

var lines = myText.split("\n"), result; // split the text into an array to loop through it

for(var i = 0, len = lines.length; i < len; i++) {
    if(lines[i].indexOf("line") < 0) { // if we find a line that doesn't match
        result = lines[i];
        break; // if we find a result break the loop
    }
}

console.log("Result: " + result); // log the line containing the result
于 2013-02-19T00:34:20.383 回答
0

您可以拆分行\n,然后使用 Array.filter方法仅获取不匹配的行:

myText.split("\n").filter(function (elem) {
    return elem.indexOf(p) === -1;
});

http://jsfiddle.net/ExplosionPIlls/S7B5f/1/

于 2013-02-19T00:35:12.380 回答