Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式匹配文本区域中填充空格的行条目_Javascript_Html_Regex - Fatal编程技术网

Javascript 正则表达式匹配文本区域中填充空格的行条目

Javascript 正则表达式匹配文本区域中填充空格的行条目,javascript,html,regex,Javascript,Html,Regex,我有一个html文本区域,其中的条目如下所示: google.com youtube.com word word netflix.com twitch.tv vimeo.com word soundcloud.com word word 我想做一个功能,将搜索一个url列表,并删除它的所有条目。为此,我首先需要一个正则表达式来查找第一个事件。请注意,我只需要并希望找到第一个事件 该功能只能删除完全匹配的项。就是 DeleteEntry("youtube.co

我有一个html文本区域,其中的条目如下所示:

google.com
   youtube.com   word word
  netflix.com   
 twitch.tv
  vimeo.com  word
soundcloud.com  word    word
我想做一个功能,将搜索一个url列表,并删除它的所有条目。为此,我首先需要一个正则表达式来查找第一个事件。请注意,我只需要并希望找到第一个事件

该功能只能删除完全匹配的项。就是

DeleteEntry("youtube.com");
不应删除第二行,但

DeleteEntry("youtube.com   word word");
应该

所以基本上,我需要匹配这个模式

(beginningOfString OR newlineChar) then (anyWhiteSpaceExceptNewline) then (ENTRY) then (anyWhiteSpaceExceptNewline) then (endOfString OR newlineChar)

这就是我目前所拥有的

var expression = "\n|^[ \f\r\t\v]*" + entry + "[ \f\r\t\v]*\n|$";
var match = listbox.value.match(expression);

它似乎没有按我期望的方式工作。

注意:如果要在字符串中使用
\
,则必须将其转义<代码>“\some text”错误,但
“\\some text”
正确

var ta=document.getElementById(“ta”),
inp=document.getElementById(“inp”),
btn=document.getElementById(“btn”);
//要在RegeExp中使用的转义文本(从:https://stackoverflow.com/q/3115150/6647153)
函数转义(文本){
返回text.replace(/[-[\]{}()*+?,\\^$\\s]/g,'\\$&');
}
函数deleteEntry(查询){
var text=ta.value;
var regexText=query.trim()//删除周围的空格
.split(//\s+/)//拆分为令牌(“a b c”变为[“a”、“b”、“c”))
.map(escape)//转义标记(“a.com”变为“a\\.c”,因此它将是/a\.c/,其中“.”被视为普通“.”而不是特殊字符。)
.join(\\s+);//将令牌与\s+连接在一起([“a”、“b”、“c”]变为“a\\s+b\\s+c”,因此它将是/a\s+b\s+c/)
var regex=new RegExp(“^\\s*”+regexText+“\\s*$”,“gm”);//带^\s*和\s*$的surrond regexText,并对多行文本使用g修饰符,对多行文本使用m修饰符
ta.value=text.replace(regex,“”;//将匹配的文本替换为“”,并将其重新分配回textarea
}
btn.onclick=函数(){
deleteEntry(inp.value);//调用deleteEntry将输入值作为查询传递给它
}
textarea{
显示:块;
宽度:100%;
高度:100px;
}

谷歌网站
youtube.com word
netflix.com
twitch.tv
vimeo.com单词
soundcloud.com单词

删除
你能告诉我们到目前为止你做了些什么吗。我已经在问题的底部…你可以尝试使用
m
flag-
var expression=new RegExp(“^[\f\r\t\v]*”+entry+“[\f\r\t\v]*$,“m”)我从中得到的是使用多行选项,这大大简化了表达式。似乎我原来的正则表达式会使用一些附加的括号,比如:
“(^\n)[\f\r\t\v]*”+entry+“[\f\r\t\v]*(\n |$)”
我不确定paren为什么工作,但我确实得到了预期的行为。此外,出于我的目的,我需要在列表字符串中获得匹配的开始和结束索引,因为我想选择匹配项并运行delete命令,以便将删除项添加到浏览器的undo/redo堆栈中。因此,我没有使用
replace
,而是使用
match()
,然后使用
indexOf()
match.length
来获取开始和结束索引。在上面的评论中使用我的可选非多行方法,您可以从一个
match()
调用中获取匹配字符串、匹配长度和开始索引。这个答案还包括首先从url中转义特殊正则表达式字符,我在这篇原始文章中没有提到我正在这样做。一定要这样做。