【问题标题】:javascript regex match anything not inside a specific attributejavascript 正则表达式匹配不在特定属性内的任何内容
【发布时间】:2016-03-05 17:12:14
【问题描述】:

假设我想匹配 url,它们不在 html 标签的特定属性集中。

<span cstm1="url1" cstm2="url2" data-x="url3">url4</span>

我只想匹配 url3 和 url4,所以我尝试了类似的方法:

/(?!(?:cstm1|cstm2)=["']?)(url_regex)/g

问题是消极的前瞻断言在它之前需要一些东西,我不能确保数字不能在引号内,因为它仍然有效,所以我没有任何合理的理由来支持这个消极的前瞻断言.

如果我能够在断言后面使用否定的外观,那将非常容易,但我使用的 javascript 不支持它,所以我有点卡住并寻求有关如何实现这一点的帮助。

我只寻找正则表达式的解决方案。

编辑:

我用来查找网址的网址正则表达式:

((?:(?:https?):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|\[(?:(?:[0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?:(?::[0-9a-fA-F]{1,4}){1,6})|:(?:(?::[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(?::[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(?:ffff(?::0{1,4}){0,1}:){0,1}(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(?:[0-9a-fA-F]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\]|localhost|(?:xn--[a-z0-9\-]{1,59}|(?:(?:[a-z\u00a1-\uffff0-9]+-?){0,62}[a-z\u00a1-\uffff0-9]{1,63}))(?:\.(?:xn--[a-z0-9\-]{1,59}|(?:[a-z\u00a1-\uffff0-9]+-?){0,62}[a-z\u00a1-\uffff0-9]{1,63}))*(?:\.(?:xn--[a-z0-9\-]{1,59}|(?:[a-z\u00a1-\uffff]{2,63}))))(?::\d{2,5})?(?:\/[^"'()<>\s]*)?)

【问题讨论】:

    标签: javascript regex dom negative-lookahead negative-lookbehind


    【解决方案1】:

    在没有lookbehind 的情况下,您可以使用捕获组来提取结果。

    /(?:cstm1|cstm2)=(['"]?)\d+\1|(\b\d+\b)/ig
    

    使用captured group #2 进行匹配。

    RegEx Demo

    【讨论】:

    • 谢谢,但我有问题。当我说我希望捕获数字,我希望捕获 url 时,我有点撒谎。我有一个来自 gist.github.com/dperini/729294 的正则表达式 URL,并进行了一些修改。我试图用 url 正则表达式替换正则表达式的 \d+ 部分,但不幸的是它确实找到了所有内容。我无法弄清楚为什么在插入 url 正则表达式时会发生这种情况,我已将修改后的 url 正则表达式添加到 OP 中。
    • 您需要编辑问题以澄清更多信息。解析 URL 与您的原始问题完全不同。我建议您添加带有预期输出的示例输入 URL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2017-11-04
    相关资源
    最近更新 更多