Javascript 的奇怪 RegEx 请求
Posted
技术标签:
【中文标题】Javascript 的奇怪 RegEx 请求【英文标题】:Odd RegEx request for Javascript 【发布时间】:2020-11-04 00:38:53 【问题描述】:我在使用某个 RegEx 替换字符串以供以后在 javascript 中使用时遇到问题。
我们有相当多的文本以非常奇怪的格式存储,我们不允许修复。 但我们确实需要在其中找到所有“网络路径”字符串,遵循以下规则:
A.匹配总是以 2 个反斜杠开头。 B. 匹配字符应在第一次出现以下任何一个时立即停止:
-
一个
一个空间
换行
回车
一个 & 字符
文字“\r”或“\n”字符串(但仅当出现在行尾时)
我们“几乎”让它与/\\\\[^ &<\s]*/gi
一起工作,如此 RegEx 测试器页面所示:
https://regex101.com/r/T4cDOL/5
即使我们让它工作起来,RegEx 也必须进一步“逃脱”才能使用 我们的 Javascript 代码,但这也没有按预期工作。
【问题讨论】:
【参考方案1】:从您的示例中,您似乎确实有一个反斜杠,后跟一个 n
和一个反斜杠,后跟一个 r
(与换行符或回车相反),这意味着您不能只使用否定字符类(因为您需要处理两个字符的序列)。我会使用积极的前瞻来知道在哪里停止,所以我可以对那部分使用交替。
你还没有说这些字符串的哪些部分应该匹配,所以我不得不猜测一下,但这是我最好的猜测(来自Niet the Dark Absol 的有用输入):
const rex = /\\\\.*?(?=[ &<\r\n]|\\[rn](?:$| ))/gmi;
也就是说:
匹配以\\
开头
在前瞻之前采取一切措施(非贪婪)
前瞻:交替:
空格、&
、<
、回车(\r
,字符 13)或换行符(\n
,字符 10); 或
反斜杠后跟r
或n
if 位于行尾或后跟空格(因此我们得到\nancy
而不是\n
之后它)。
Updated regex101
您可能希望在\r
/\n
之后添加更多字符,而不仅仅是一个空格。如果是这样,请将其设为字符类(和/或使用\s
表示“空白”,如果适用):
const rex = /\\\\.*?(?=[ &<\r\n]|\\[rn](?:$|[ others]))/gmi;
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^
【讨论】:
我添加了更多的“示例文本”,您的想法几乎可行,但并非总是如此:regex101.com/r/T4cDOL/5 我认为您还应该处理匹配到字符串/行末尾的情况。 @SusanSuzy - 请update your quesiton 将回答问题所需的所有信息放入问题中,而不仅仅是链接。一定要显示应该匹配的内容。两个原因:人们不应该去场外帮助你;和链接腐烂,使问题及其答案对未来的人们毫无用处。请在问题中添加minimal reproducible example in。更多:How do I ask a good question? 和 Something in my web site or project doesn't work. Can I just paste a link to it? @NiettheDarkAbsol - 不错的主意,我会将\r\n
添加到角色类中。
regex101.com/r/T4cDOL/6 -- 似乎某些“路径”可能将\n
作为子字符串,因此该标记并不总是作为分隔符。整个事情都很尴尬XD以上是关于Javascript 的奇怪 RegEx 请求的主要内容,如果未能解决你的问题,请参考以下文章
javascript ajax 调用通过仅使用 POST 方法的 fetch 调用:奇怪的行为是 post 后跟 get plus 再次请求所有资源?