2014-10-30 52 views
1

我需要一个正则表达式来匹配分数和混合数字,但不允许任何不同的值(整数,分子,分母)为零。为什么.NET匹配我的正则表达式,但Javascript不?

我发现一个接近我所需要的并且修改了一下的解决方案。

然后,我在使用.NET正则表达式引擎的RegexHero上对它进行了测试。

正如我期望的,正则表达式匹配“1 1/2”,但是当我用.test()函数在Javascript中尝试相同的正则表达式时,它与它不匹配。

我怀疑它与每个引擎如何处理空白有关,但我不确定。任何想法为什么它匹配一个而不是另一个?

正则表达式是:

^([1-9][0-9]*/[1-9][0-9]*|[1-9][0-9]*(\s[1-9][0-9]*/[1-9][0-9]*)?)$ 

编辑:

我想贾森的建议,但我的测试仍然失败。

var ingredientRegex = /^([1-9][0-9]*\/[1-9][0-9]*|[1-9][0-9]*(\\s[1-9][0-9]*\/[1-9][0-9]*)?)$/; 
function isValidFraction(value) { 
    return ingredientRegex.test(value); 
} 

它正在用茉莉花进行测试。

it("should match a mixed number", function() { 
    expect(isValidFraction("2 1/2")).toBe(true); 
}); 

SOLUTION:

它现在的工作。我需要逃避“/”字符,但是我不需要像贾森建议的那样逃避“\ s”。

+0

对我的作品? http://refiddle.com/refiddles/5452804275622d61533e0000 – Mathletics 2014-10-30 18:15:38

+2

你可以发布你在JavaScript中测试它的代码吗? – 2014-10-30 18:18:01

+1

你是否需要逃避你的'/'也许?你怎么称呼它_exactly_在JavaScript中? – Wrikken 2014-10-30 18:18:25

回答

3

你需要介意你的逃生。字符类中的\s反斜杠需要转义。

var regex = new RegExp("^([1-9][0-9]*/[1-9][0-9]*|[1-9][0-9]*(\\s[1-9][0-9]*/[1-9][0-9]*)?)$"); 

var str = "1 1/2"; 

console.log(regex.test(str)); // true 

此方法现在需要对/字符进行不同的转义。

var regex2 = /^([1-9][0-9]*\/[1-9][0-9]*|[1-9][0-9]*(\s[1-9][0-9]*\/[1-9][0-9]*)?)$/; 

console.log(regex2.test(str)); // true 

MDN RegExp

+0

我试过你的解决方案,但它似乎没有工作。请参阅编辑过的帖子。 – mattherman 2014-10-30 20:49:07

+0

我需要转义“/”,但我不需要转义“\ s”。它现在似乎正在工作。感谢您的帮助。 – mattherman 2014-10-30 20:51:31

相关问题