相关疑难解决方法(0)

有什么区别.*?和.*正则表达式?

我正在尝试使用正则表达式将字符串分成两部分.字符串格式如下:

text to extract<number>
Run Code Online (Sandbox Code Playgroud)

我一直在使用(.*?)<,<(.*?)>哪个工作正常,但在阅读了一点regex之后,我才开始想知道为什么我需要?表达式中的.我通过这个网站找到它们之后才这样做,所以我不确定它们之间的区别.

regex regex-greedy

126
推荐指数
3
解决办法
9万
查看次数

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

正则表达式为" (\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));
Run Code Online (Sandbox Code Playgroud)

输出(如我所料):

true
true
false
Run Code Online (Sandbox Code Playgroud)

JavaScript的

环境:节点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"));
Run Code Online (Sandbox Code Playgroud)

输出:

false
false
false
Run Code Online (Sandbox Code Playgroud)

版本2:

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

var digitalOnly = /\d+/;
console.log(digitalOnly.test("12345"));
console.log(digitalOnly.test("12345ABC"));
Run Code Online (Sandbox Code Playgroud)

输出:

true
true
true
Run Code Online (Sandbox Code Playgroud)

感谢你的帮助.我的代码有问题:

  1. 何时使用创建正则表达式RegExp(),应该转义反斜杠.(@LukStorms,@ grzegorz-oledzki和@benny)(另请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp中的演示)
  2. 测试方法与Java中的匹配方法不同.它应该添加^$断言字符串的开头和结尾.(@sweeper答案中的更多细节)

所以,代码可以是:

var orderNumberRegExp …
Run Code Online (Sandbox Code Playgroud)

javascript java regex

3
推荐指数
1
解决办法
211
查看次数

标签 统计

regex ×2

java ×1

javascript ×1

regex-greedy ×1