gpt4 book ai didi

javascript - 为什么我的正则表达式在 JavaScript 中不起作用? (它适用于 Java)

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:20:39 25 4
gpt4 key购买 nike

<分区>

正则表达式为“(\d+)|(N\A)”,匹配数字或字符串“N\A”。它适用于 Java,但不适用于 JavaScript。

  1. Java 和 JavaScript 的结果不同。
  2. JavaScript 中两个版本的结果不同。

我做错了什么?

代码代码片段:

Java

环境:JDK 1.8.0_144

String orderNumberRegExp = "(\\d+)|(N/A)";
System.out.println("12345".matches(orderNumberRegExp));

String digitalOnly = "\\d+";
System.out.println("12345".matches(digitalOnly));
System.out.println("12345ABC".matches(digitalOnly));

输出(如我所料):

true
true
false

JavaScript

环境:node v9.8.0

两个版本都返回了错误的结果。

版本 1:

var orderNumberRegExp = new RegExp("(\d+)|(N\/A)"); // or "(\d+)|(N/A)"
console.log(orderNumberRegExp.test("12345"));

var digitalOnly = new RegExp("\d+");
console.log(digitalOnly.test("12345"));
console.log(digitalOnly.test("12345ABC"));

输出:

false
false
false

版本 2:

var orderNumberRegExp = /(\d+)|(N\/A)/
console.log(orderNumberRegExp.test("12345"));

var digitalOnly = /\d+/;
console.log(digitalOnly.test("12345"));
console.log(digitalOnly.test("12345ABC"));

输出:

true
true
true

感谢您的帮助。我的代码有问题:

  1. 当使用 RegExp() 创建正则表达式时,反斜杠应该被转义。 (@LukStorms、@grzegorz-oledzki 和@benny)(也引用来自 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp 的演示)
  2. 测试方法不同于Java中的matches方法。它应该添加 ^$ 来断言字符串的开始和结束。 (@sweeper 的回答中有更多详细信息)

所以,代码可以是:

var orderNumberRegExp = new RegExp("^(\\d+)$|^(N/A)$");
console.log(orderNumberRegExp.test("12345")); // true
console.log(orderNumberRegExp.test("N/A")); // true
console.log(orderNumberRegExp.test("12345ABC")); // false
console.log(orderNumberRegExp.test("ABC1234")); // false

var digitalOnly = new RegExp("^\\d+$");
console.log(digitalOnly.test("12345")); // true
console.log(digitalOnly.test("12345ABC")); // false

正则表达式也可以是:

var orderNumberRegExp = /^(\d+)$|^(N\/A)$/
var digitalOnly = /^\d+$/

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