为什么.NET匹配我的正则表达式但Javascript不匹配?

时间:2014-10-30 18:13:27

标签: javascript regex

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

我找到了一个接近我需要的解决方案并稍微修改了一下。

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

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

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

正则表达式为:

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

编辑:

我尝试了Jasen的建议,但我的测试仍然失败。

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);
}

正在使用Jasmine进行测试。

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

解决方案:

现在正在运作。我需要逃避" /"人物,但我不需要逃避" \ s"正如Jasen所说。

1 个答案:

答案 0 :(得分: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 字符进行不同的转义。

/

MDN RegExp