将Javascript正则表达式转换为Java语法

tes*_*dtv 21 javascript java regex matcher

我知道regEx在各种语言中很常见......但是我在编写Java语法时遇到了麻烦.我有一个用JS编码的正则表达式;

if((/[a-zA-Z]/).test(str) && (/[0-9]|[\x21-\x2F|\x3A-\x40|\x5B-\x60|\x7B-\x7E]/).test(str))         
return true;
Run Code Online (Sandbox Code Playgroud)

我如何在Java中编写相同的内容?

我已经进口了

import java.util.regex.Matcher;
import java.util.regex.Pattern;
Run Code Online (Sandbox Code Playgroud)

只是添加,从我尝试它是说\ x是一个无效的转义字符..

Ste*_*n C 40

将前导和尾随'/'字符更改为'"',然后将每个字符替换'\'"\\".

与Javascript,Perl和其他脚本语言不同,Java没有针对正则表达式的特殊语法.相反,它们(通常)使用Java字符串文字表达.但是'\'Java字符串文字中的转义字符,因此'\'原始正则表达式中的每一个都必须使用第二个转义'\'.(如果你在正则表达式中有一个字面反斜杠字符,你最终会"\\\\"得到Java字符串文字!!)

这对Java新手来说有点混乱/令人生畏......但它完全符合逻辑.请记住,您正在使用Java字符串文字来表达正则表达式.


但正如@antak所指出的,Java和Javascript中的正则表达式语言之间存在各种差异.因此,如果您使用Javascript正则表达式并将其音译为Java,则可能无法正常工作.

以下是一些总结差异的参考资料.


Evg*_*nov 19

您可以使用在线正则表达式评估器(https://regex101.com)进行转换。

  1. 转到https://regex101.com
  2. 选择 ECMAScript (JavaScript) FLAVOR
  3. 插入您的正则表达式
  4. 打开 TOOLS -> Code Generator (LANGUAGE - Java)
  5. 复制粘贴

即使它不是硬核程序员的方式,它也明显不太容易出错。特别是如果您只需要转换一两个表达式。

  • 我盯着一些很长的 JS 正则表达式,并将 NPM 模块重新编程到 Java 包中...我小心翼翼地逃避了转义以逃避我的头痛...在这次越轨行为结束时,这个答案帮助我摆脱了我的疑虑我的转义序列已经转义了一些编码转义逻辑! (3认同)