2009-11-23 136 views
1

正则表达式的乐趣...正则表达式匹配部分的字符串再次

就拿http://something.com/en/page

我想测试一个精确匹配上/ EN /包括斜线,否则它会匹配“ en'来自字符串的其他部分。

我确定这很容易,对于除我以外的人!

编辑:

我使用它的string.match()在JavaScript

+1

有关的编程语言,你需要的正则表达式? C#和VB.net,例如都明白'“/ en /”',但这显然不是你正在寻找的...... – Heinzi 2009-11-23 18:59:25

+0

@Heinzi - JavaScript有定义一个正则表达式的速记方式,例如var someRegex =/\/en \ // ig,它也可以像这样写var someRegex = new RegExp(“/ en /”,“ig”)。速记方式通常是优选的。我只使用新的RegExp,如果我需要通过串联字符串来构建正则表达式。 – nickytonline 2009-11-23 19:15:55

回答

3

那么这真的取决于编程语言将执行正则表达式,但实际正则表达式是简单

/en/ 

对于.Net,以下代码正常工作:

string url = "http://something.com/en/page"; 

bool MatchFound = Regex.Match(url, "/en/").Success; 

以下是JavaScript版本:

var url = 'http://something.com/en/page'; 
if (url.match(/\/en\//)) { 
    alert('match found'); 
} 
else { 
    alert('no match'); 
} 

DUH

谢谢Welbog和克里斯·巴兰斯,以使什么应该是最明显的一点。这不需要正则表达式来解决。它只是一个包含声明。正则表达式只能用在需要的地方,应该是我的第一个考虑因素,而不是最后一个。

+0

完美,谢谢..我在逃避我的斜线时遇到了问题。 – Ben 2009-11-23 19:22:08

+2

使用'regex.test()'比'string.match()'花费更少' – James 2009-11-23 20:52:00

+3

使用简单的String.Contains(“/ en /”)比使用Regex更省钱... – 2009-11-23 22:06:37

1

任何理由/en/是行不通的?

+0

这是行不通的,因为斜杠是正则表达式的组成部分,因此需要根据Parappa的回答来逃避它,因为斜杠通常用作正则表达式的指示符,在大多数posix兼容系统(如unix)中,会有额外的信息提供,例如搜索忽略大小写字符串将/ some_string /我。 – t0mm13b 2009-11-23 19:01:10

+0

而且它基于什么编程语言,请参阅TheLameDuck的答案。绝对是C#,你需要避开正斜杠。 – t0mm13b 2009-11-23 19:02:20

+0

虽然我很欣赏这些荣誉,但它只是反斜杠\才需要被转义。 另外,如果出现问题,您可以随时回避整个问题,例如:string test =#“my back \ slash”; – 2009-11-23 19:04:22

2

您可能需要逃避正向斜线...

/\/en\// 
+0

只要做一个字符串匹配,正则表达式对于这种情况是矫枉过正的。 – 2009-11-23 22:08:06

5

如果你想为特别地匹配/en/,你并不需要一个正则表达式的。只需使用您的语言相当于contains来测试该子字符串。

如果你想匹配的两条斜线之间的URL中的任意两个字母的一部分,你需要这样的表达式:

/../ 

如果你想要捕捉的两个字母的代码,封闭期间括号:

/(..)/ 

根据你的语言,你可能需要逃避斜线:

\/..\/ 
\/(..)\/ 

如果你想确保你匹配字母代替任何字符(包括数字和符号),您可能希望使用表达式像这个:

/[a-z]{2}/ 

这将大多数正则表达式的变化来识别。

同样,你可以逃避斜线,并添加一个捕获组是这样的:

\/([a-z]{2})\/ 

如果你不需要逃避他们:

/([a-z]{2})/ 

这个表达式将匹配任何字符串形式为/xy/,其中xy是字母。所以它会匹配/en//fr//de/

在JavaScript中,您将需要转义版本:\/([a-z]{2})\/

+1

+1指出Regexps对于精确匹配不是必需的。 – Heinzi 2009-11-23 19:32:55

0

你并不需要为这个正则表达式:

location.pathname.substr(0, 4) === "/en/" 

当然,如果你坚持使用正则表达式,使用:

/^\/en\//.test(location.pathname)