我只需找到第一行不匹配的字符串 - 这可能比找到所有字符串更容易。我发现的唯一解决方案是删除包含字符串的行,然后我选择其余的。
例如,在下面的文字中,我需要找到不包含字符串"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);
注意:
“提示”行仅用于调试目的
如果我在Bookmarklets中仅使用“myvar = ..”而不是“var myvar = ..”,它将修改当前页面,打印变量。 )
答案 0 :(得分:3)
正则表达式/^(?!.*line).*$/m
匹配不包含“line”模式的行。
如果没有这样的行,则以下代码返回null
,否则返回第一行:
myText.match(/^(?!.*line).*$/m);
完整的代码如下:
var x = (myText.match(/^(?!.*line).*$/m)||['no result found'])[0];
答案 1 :(得分:1)
由于没有一个答案提到这个:
str.match(/^(?!.*line).*$/gm);
m
标记使^
和$
匹配行的开头和结尾,而不是整个字符串。
由于.
与新行字符不匹配,因此负前瞻包含在同一行中。
请注意,如果字符串以\n
结尾,则会有一个空字符串作为结果中的最后一个元素,这是完全正常的,因为该空字符串是一个单独的行。如果你只想捕获非空字符串(即使在输入字符串的中间),那么你可以对正则表达式进行一些小改动:
str.match(/^(?!.*line).+$/gm);
从*
更改为+
会强制正则表达式匹配非空行。
答案 2 :(得分: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;
}
}
答案 3 :(得分: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
答案 4 :(得分:0)
您可以按\n
拆分行,然后使用数组.filter
方法只获取不匹配的行:
myText.split("\n").filter(function (elem) {
return elem.indexOf(p) === -1;
});