在JavaScript中查找与字符串不匹配的行
Find lines not matching string in JavaScript
我只需要找到第一行不匹配的字符串,这可能比找到所有字符串更容易。到目前为止,我找到的唯一解决方案是删除包含字符串的行,然后我选择其余的
例如,在下面的文本中,我需要找到不包含字符串"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=.",它将修改当前页面,打印变量。)
正则表达式/^(?!.*line).*$/m
匹配不包含模式"line"的行。
如果没有这样的行,则以下代码返回null
,否则返回第一行:
myText.match(/^(?!.*line).*$/m);
完整的代码看起来像:
var x = (myText.match(/^(?!.*line).*$/m)||['no result found'])[0];
因为没有一个答案提到这一点:
str.match(/^(?!.*line).*$/gm);
m
标志使^
和$
匹配一行的开始和结束,而不是整个字符串。
由于.
与新行字符不匹配,因此在同一行中包含负先行。
请注意,如果字符串以'n
结尾,则会有一个空字符串作为结果中的最后一个元素,这是完全正常的,因为该空字符串是单独的一行。如果您只想捕获非空字符串(即使是在输入字符串的中间),那么您可以对regex:进行一个小的更改
str.match(/^(?!.*line).+$/gm);
从*
更改为+
将强制正则表达式匹配非空行。
我跳过了提示内容,因为我不确定你在用它做什么。
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;
}
}
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
您可以通过'n
分割行,然后使用Array .filter
方法只获取不匹配的行:
myText.split("'n").filter(function (elem) {
return elem.indexOf(p) === -1;
});
http://jsfiddle.net/ExplosionPIlls/S7B5f/1/
相关文章:
- 使用jscodeshift添加表达式时,错误{..}与类型字符串不匹配
- 使用正则表达式查找字符串中的不匹配字符
- 正则表达式,用于匹配不是字符串“ABCD”的任何内容
- 正则表达式能否匹配字符串开头或结尾的字符(但不能同时匹配)
- 在谷歌地图API自动完成中显示不匹配字符串的结果
- WebSQL:处理SQL时出错:数量为''语句字符串中的s与参数计数不匹配
- RegEx和javascript替换不匹配的字符串
- 确定字符串是否包含不在字符列表中的字符,如果是,则确定哪些字符不匹配
- 如果字符串与正则表达式 JavaScript 不匹配,则返回 True
- 当字符串与标头 PHP 不匹配时,将列留空
- 正则表达式匹配:字符串开头不包含字符
- 如果字符串不匹配,.split() 返回什么
- 如果数组中的字符串不匹配,请从字符串中删除字符串字符
- JavaScript正则表达式与预期的字符串不匹配
- 正则表达式匹配不在字符串或正则表达式文本中的 JS 源
- 编写的模式与字符串 Javascript/jQuery 不匹配
- 注入脚本以播放音频文件,如果 InnerText 与字符串不匹配
- RegEx在生产中与字符串不匹配,但在测试仪上有效
- 删除不匹配字符串的javascript对象属性
- javascript中的RexExp不匹配字符串中的数字