如何编写正则匹配/keyword与前一个斜杠之间的目标字符串
问题原因
你之前编写的正则使用了贪婪匹配的.*,会尽可能匹配最长的符合规则的字符串,因此会从路径最开头的/开始匹配,直到/keyword前的位置,最终拿到了不符合预期的整段前缀内容。
解决方法
写法1:正向预查(直接拿到匹配结果,不需要额外取捕获组)
正则写法:
[^/]+(?=\/keyword)
如果要兼容你示例中keyword被<strong>标签包裹的情况,可以调整为:
[^/]+(?=\/<strong>keyword<\/strong>)
规则说明:
[^/]+:匹配所有不包含斜杠/的连续字符,天然限定了匹配范围只能在两个相邻斜杠之间(?=\/keyword):正向肯定预查,限定前面匹配的内容后面必须紧跟着/keyword,确保我们拿到的是keyword前紧邻的一段路径
写法2:捕获组实现(兼容不支持正向预查的正则环境)
正则写法:
\/([^/]+)\/keyword
匹配后取第一个捕获组的内容即可得到目标字符串。
测试效果
对你给出的示例路径使用上述正则,最终匹配结果为:fb9c2b12-1496-4r01-b92b-30e848f3adbc,完全符合需求。
内容的提问来源于stack exchange,提问作者muse
相关产品推荐
相关产品推荐

