我正在尝试编写一个正则表达式,用下划线(在 Java 中)替换 JavaScript 变量名称中的所有无效字符。
我想做的是:
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。 最佳答案
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_$]
并出现在行首的内容。 |
是或。 [^0-9a-zA-Z_$]
匹配任何不是 [0-9a-zA-Z_$]
的东西。有关更多信息,请参阅 regex tutorial。
关于JavaScript 变量名正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19782163/