我正在重新调整javascript中定义的一些网址:
var x = "http:\/\/example.com\/test.aspx?v=12.1&x=2&p=3";
var y = "http:\/\/example.com\/test.aspx?v=92.1&x=2&p=4";
我的正则表达式捕获域部分,路径和查询字符串进入捕获组非常有效:
(http:\\/\\/example.com\\/)([0-9a-zA-Z-\\\/\._]+)([\?]?)(.+)`
然而,凡士林中的沙子是最后的双引号也是匹配的。如何在结束报价之前停止匹配?
碰巧这是针对IIS7的UrlRwriter所以我不能使用任何代码来删除最终报价。
答案 0 :(得分:2)
而不是匹配任何一次或多次.+
尝试匹配任何不是引用一次或多次:
[^"]+
[]
创建一个字符类,'^'表示不是..或否定字符类。这将完全匹配任何不是引用的内容。
答案 1 :(得分:2)
我假设您不允许在网址正文中使用引号,因此您只需将(.+)
更改为([^"]+)
。
修改:我可能需要允许"
或'
,因此您可以将上述内容更改为([^"']+)
。如果你想更加彻底,你可以选择
([^"']+)(http:\\/\\/example.com\\/)([0-9a-zA-Z-\\\/\._]+)([\?]?)(.+?)\1
...并忽略第一个捕获组。这样,它将所有内容都用到下一个匹配的引用。但这可能是不必要的。我无法想象你想在你的URL字符串中允许'
或"
,但是.
已经匹配了几个不应该在URL中的字符,所以我以为我会留给你。