Javascript 正则表达式匹配文本区域中填充空格的行条目
我有一个html文本区域,其中的条目如下所示: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
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中转义特殊正则表达式字符,我在这篇原始文章中没有提到我正在这样做。一定要这样做。