最长路径正则表达式匹配

时间:2016-05-27 08:44:29

标签: javascript regex node.js

我正在处理MQTT handler,我想为其发出最长事件名称匹配的事件。例如:

我正在听几个事件:

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

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

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

修改

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

1 个答案:

答案 0 :(得分:0)

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

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

regex tester

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

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

regex tester

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);