我需要能够识别字符串是否与以下模式匹配:
':模块名称' || 'com.example.ClassName' || ':模块名称:com.example.ClassName' || 'http://url ';
我需要确定字符串是否与上述模式之一匹配,让我们将它们分为 3 组(url、本地和无),其中 url 代表有效的 url 字符串。另一方面,如果我需要提取模块和组件名称,则 local 必须有 3 个不同的变体 (':module-name' || 'com.example.ClassName' || ':module-name:com.example.ClassName')。
模块名称必须是有效的nodejs包名称,组件名称必须是有效的类名称(我得到的有效类名称已被此正则表达式覆盖:/^@?[a-z_A-Z]\w+(?:.@?[a-z_A-Z]\w+)*$/)。
我需要的是一种方法来识别字符串属于哪个组(url、本地或无),如果是本地,则提取模块和组件名称。正则表达式解决方案的最佳选择...
谢谢
最佳答案
这能行吗? See on regex101
^:.+-.+:.+\..+\..+|^:.+-.+|^.+\..+\..+|^http[s]?:\/\/.+
匹配 :x-x
、x.x.x
、:x-x:x.x.x
、http[s]://x
>, x 是重复 1 次到无限次之间的任何字符。如果前面有某些东西,它就不会匹配任何一个。但它将匹配 com.class.class.class.class
和 http://invalidUrl
。正如你所说,你检查类名是否正确。如果您只想要有效的网址,则可以将 ^http[s]?:\/\/.+
替换为 https?:\/\/(\w+:{0,1 }\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?
或任何验证 url 的正则表达式。 (这个不是我发明的)
关于javascript - 从字符串中匹配和提取信息的特定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40565856/