我需要一个正则表达式来匹配分数和混合数,但不允许任何不同值(整数,分子,分母)为零。
我找到了一个接近我需要的解决方案并稍微修改了一下。
然后我在使用.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所说。
答案 0 :(得分:3)
你需要注意逃脱。 1}}字符类中的反斜杠需要转义。
\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
字符进行不同的转义。
/