这是我试图用正则表达式解析的完整字符串:
example.com/newsite.com.html?var=/newsite.com&var=newsite.com
我希望能够匹配字符串的newsite.com
部分,但前提是它不会出现在?
符号之后。
目前,我只是到目前为止:
/newsite.com/g
选择newsite.com
的所有实例而不是第一个实例。
链接到正则表达式游乐场http://regexr.com/3fmre
修改
此处*
代表我想忽略的所有内容,基本上仅匹配第一次出现的newsite.com
:
example.com/newsite.com.html?****************************
答案 0 :(得分:2)
您可以使用RewriteCond
并仅测试REQUEST_URI
。 QUERY_STRING
不属于REQUEST_URI
,因此类似于:
RewriteCond %{REQUEST_URI} newsite\.com
RewriteRule your rules if the cond if matched
答案 1 :(得分:0)
您可以使用[^?]
这是一个排除组,它匹配除了其中指定的每个符号,在这种情况下为?
。例如,表达式/^[^?]*/
将匹配从开始到找到?
(不会是匹配的一部分)的所有内容。
如果您希望它仅从newsite.com
开始匹配,您可以使用/newsite\.com[^?]*/
,或者从?
结束,您可以使用/[^?]*$/
。
由于您标记了mod-rewrite
,因此您还可以选择使用%{QUERY_STRING}
作为条件。查询字符串基本上是我们如何在完整网址中?
之后调用的内容。
例如,使用RewriteCond %{QUERY_STRING} newsite.com
意味着只有在查询字符串中找到RewriteRule
时才会应用此条件后的newsite.com
。
答案 2 :(得分:0)
这是我提出的解决方案,它不是防弹的,但在很大程度上起作用:
(?<=[^=]\/)newsite\.com
它会忽略任何以=
开头并且在开头没有/
的内容。
请注意,这仅适用于支持&#34;正面观察&#34;的正则表达式实现。
答案 3 :(得分:-1)
以下是两种方法..
var str = "example.com/newsite.com.html?var=/newsite.com&var=newsite.com";
//1. Look for ? and get the substring from 0 to the foundAt value
var foundAt = str.indexOf('?');
document.getElementById("substr").innerHTML = str.substr(0,foundAt);
//2. Using regex find the location of occurence of newsite.com and ignore rest
var str = "example.com/newsite.com.html?var=/newsite.com&var=newsite.com";
var loc = str.search(/newsite\.com[^?]*/);
document.getElementById("substr").innerHTML = loc;
<p id="substr"></p>