gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:34:09 24 4
gpt4 key购买 nike

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

我找到了一个接近我需要的解决方案并对其进行了一些修改。

然后我在 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

MDN RegExp

关于javascript - 为什么 .NET 匹配我的正则表达式但 Javascript 不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26660377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com