我正在尝试使用正则表达式将字符串分成两部分.字符串格式如下:
text to extract<number>
Run Code Online (Sandbox Code Playgroud)
我一直在使用(.*?)<,<(.*?)>哪个工作正常,但在阅读了一点regex之后,我才开始想知道为什么我需要?表达式中的.我通过这个网站找到它们之后才这样做,所以我不确定它们之间的区别.
正则表达式为" (\d+)|(N\A)",它匹配数字或字符串"N\A".它适用于Java,但不适用于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)
感谢你的帮助.我的代码有问题:
RegExp(),应该转义反斜杠.(@LukStorms,@ grzegorz-oledzki和@benny)(另请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp中的演示)^并$断言字符串的开头和结尾.(@sweeper答案中的更多细节)所以,代码可以是:
var orderNumberRegExp …Run Code Online (Sandbox Code Playgroud)