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

标签 javascript regex

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

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

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

相关文章:

python - 从 <b></b> 标签中提取文本

javascript - 在文本字符串中查找与 Twitter 使用完全相同的任何 URL

javascript - React 16.3 Context API——提供者/消费者问题

javascript - OWASP ZAP 被动扫描脚本

javascript - 在 Ajax 中获得响应的问题

javascript - 如何从字符串构造正则表达式模式

ios - iOS如何在一个巨大的字符串的2个字符串之间找到多个字符串?

javascript - 如何使用正则表达式验证 Javascript 中的日期?

java - 拆分 "/n"的正则表达式

javascript - 无法将 JSON 值分配给 JS 变量