2014-04-01 103 views
-1

我有一个变量可以得到任何下面的值。 x表示任何字母数字字符,字符串可以是任意长度正则表达式匹配javascript

/xxxxxxx 
/xxxx/xxxx?xxx=xx 
/xxxxx/ 
/xxxxxxxxx? 
/xxxxxxx/xxxx/xxx 
/xx/xxx.jpg 
/xxx/xxxx/xxxx/xxxx 
/xxx/xxxx/xxx/xxx/xxxx 
/xxxx?xx=yy&abc=def&xyz=lmn 

目标是获取“?”之前的所有内容。字符串中的字符如果?字符存在 如果不存在,那么它应该简单地得到字符串

我写了一个正则表达式如下:

var pattern = /\/.*\?/; 

唯一的问题是这种模式不会在停下来?并返回整个字符串。任何线索如何解决这个问题?

+0

没有测试,但试过这种? /[\/.*^\?]+/;指定它应该匹配X没有的? – deb0rian

回答

4

的目标是让之前的所有 “?”字符串中的字符如果?字符存在,如果不存在,那么它应该简单地得到字符串

/^[^?]*/ 

这工作,因为^表示输入的开始,并[^?]表示一个字符,不是?,并且*意味着零个或多个,所以整个意思是“从输入开始,零个或多个不是问号的字符”。

这具有从输入开始到第一个问号匹配或输入结束匹配的效果,以先到者为准。

+0

This works .. ..谢谢 – runtimeZero

1

像这样的东西应该工作...

var pattern = /\/.*?(\?|$)/; 
+0

谢谢比利这个作品 – runtimeZero

+0

是的 - 但并不像接受的答案那么整齐。我以你的正则表达式作为出发点,并且非常真实地回答你的要求,而不是看看潜在的问题。为了后代 - 我添加了'?'来使''*'不贪婪,并且尽可能少地匹配,然后添加'$'来匹配字符串的末尾,并且把它放在''或' “这样,不要贪婪的匹配就会被拉到字符串的末尾,或者至少被拉到问号上。 –

1

你并不真的需要一个正则表达式在这里,你可以简单地使用indexOf()substr()

var qPos = url.indexOf('?'); 
var path = (qPos === -1) ? url : url.substring(0, qPos); 
+0

我几乎会用这个..谢谢 – runtimeZero