我试图在行的开头或末尾创建一个匹配!next
的JS正则表达式。
目前,我正在使用/(^!next|!next$)/i
。然而,这显然有点难看,而不是干,所以我希望改进。
我最接近的是:
/(?=!next)[^$]/i
但实际上这只是匹配所有内容(现在我发现我错误地记住了^
在字符类中的工作方式,所以这个解决方案无论如何都是垃圾。)
我搜索了网络,所以我完全被难倒了。
答案 0 :(得分:4)
这是一个有趣的,使用正则表达式条件:
/(^)?!next(?(1)|$)/gm
它的工作原理是它捕获行首锚,如果它不存在,则匹配行尾锚点。
但就个人而言,我仍然赞成你的解决方案而不是我的解决方案,因为对于那些对正则表达式没有非常全面了解(而且更便携)的人来说,它更具可读性。
为了增加乐趣,这是另一个版本(甚至比你最初的版本更丑):
/!next(?:(?<=^.{5})|(?=$))/gm
但我仍然建议坚持使用经典的替代品。
最后,一个在JS中运行的(不,真的):
/(?:^|(?=.{5}$))!next/gm
答案 1 :(得分:3)
你可以尝试
function beginningOrEnd(input, search) {
const pos = input.search(search);
return pos === 0 || pos === input.length - search.length;
}
beginningOrEnd("hey, !help", "!help");
这使用search.length
,因此显然search
必须是字符串。
或者,您可以自己构建正则表达式:
function beginningOrEnd(search) {
return new RegExp(`^${search}|${search}\$`, "i");
}
beginningOrEnd("!help").test(input)
在现实世界中,你当然想要适当地逃避特殊的正则表达式字符。