我正在处理MQTT handler,我想为其发出最长事件名称匹配的事件。例如:
我正在听几个事件:
test
test/replyer/
test/replyer/request
我将收到一封包含test/replyer/request/@issuer
主题的消息,该主题应触发事件test/replyer/request
。
是否有任何正则表达式策略可以帮助我找出javascript中最大的匹配路径?
修改
test
,replyer
和request
是示例的任意字符串。上面的事件列表可以是可以出现在路径上的任何内容。路径长度也是未知的。
答案 0 :(得分:0)
如果这些是你正在听的事件,你可以使用这个正则表达式:
/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);