我正在研究一个 MQTT 处理程序,我想为其发出一个事件以进行最长的事件名称匹配。例:
我正在收听几个事件:
-
test
-
test/replyer/
-
test/replyer/request
我将收到一条消息,其中包含test/replyer/request/@issuer
这样的主题,该主题应触发事件test/replyer/request
。
是否有任何正则表达式策略可以帮助我找到 javascript 中最大的匹配路径?
编辑:
test
、replyer
和request
是该示例的任意字符串。上面的事件列表可以是路径上可能出现的任何内容。路径长度也未知。
如果这些是您正在侦听的事件,则可以使用此正则表达式:
/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);