我需要一个正则表达式来匹配分数和带分数,但不允许任何不同值(整数、分子、分母)为零。
我找到了一个接近我需要的解决方案并对其进行了一些修改。
然后我在 RegexHero 上测试了它它使用.NET 正则表达式引擎。
正则表达式如我所料匹配“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);
});
解决方案:
它现在正在工作。我需要转义“/”字符,但我不需要像 Jasen 所建议的那样转义“\s”。
最佳答案
你需要小心逃避。字符类中的\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
关于javascript - 为什么 .NET 匹配我的正则表达式但 Javascript 不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26660377/