最长路径正则表达式匹配



我正在研究一个 MQTT 处理程序,我想为其发出一个事件以进行最长的事件名称匹配。例:

我正在收听几个事件:

  • test
  • test/replyer/
  • test/replyer/request

我将收到一条消息,其中包含test/replyer/request/@issuer这样的主题,该主题应触发事件test/replyer/request

是否有任何正则表达式策略可以帮助我找到 javascript 中最大的匹配路径?

编辑:

testreplyerrequest是该示例的任意字符串。上面的事件列表可以是路径上可能出现的任何内容。路径长度也未知。

如果这些是您正在侦听的事件,则可以使用此正则表达式:

/test/(?:replyer/(?:request/)?)?/

正则表达式测试仪

如果事件可以是任何内容并且应该从 URL 中提取,那么您的问题实际上是找到 URL 的路径部分:

/.*?(?=/[^/]*$)/

正则表达式测试仪

JavaScript 函数:

function eventFromUrl(url) {
  return (url.match(/.*?(?=/[^/]*$)/) || []).pop();
}
var url = 'test/replyer/request/@issuer';
document.write(eventFromUrl(url));

如果你有一个允许的事件(路径)列表,那么你可以使用上面的和从路径中砍掉,直到你有一个在列表中:

function eventFromUrl(url) {
  return (url.match(/.*?(?=/[^/]*$)/) || []).pop();
}
var validEvents = {
  'test/replyer': 1,
  'test/replyer/request': 1,
  'test': 1,
  'test/requester': 1,
  'test/requester/request': 1,
  'test/replyer/report': 1,
};
var url = 'test/replyer/request/@issuer';
for (var event = url; event && !validEvents[event]; event = eventFromUrl(event));
document.write (event);

最新更新