我正在尝试编写一个正则表达式,它将用下划线替换JavaScript变量名中的所有无效字符(在Java中)。
我想要做的是:
String jsVarName = "1inva>idName".replaceAll("[a-zA-Z_$][0-9a-zA-Z_$]", "_");
并以名为_inva_idName
的变量结束。
我正在努力做的是弄清楚如何使第一个角色与其他角色不同。
[a-zA-Z_$][0-9a-zA-Z_$]
是我想要的字符,但我不知道如何将它们挂钩到正确的语法中。我知道JS var名称可以是完整的unicode,但我只关心ASCII。
答案 0 :(得分:4)
String jsVarName = "1inva>idName".replaceAll("^[^a-zA-Z_$]|[^0-9a-zA-Z_$]", "_");
请注意,由于\w
为[a-zA-Z_0-9]
,因此可以简化:
String jsVarName = "1inva>idName".replaceAll("^[^a-zA-Z_$]|[^\\w$]", "_")
^[^a-zA-Z_$]
匹配任何非[a-zA-Z_$]
的内容并显示在该行的开头。 |
是OR。 [^0-9a-zA-Z_$]
匹配任何非[0-9a-zA-Z_$]
的内容。
有关详细信息,请参阅regex tutorial。