Javascript-RegExp-替换不被字母包围的字符

用户名

我有这样一个正则表达式:

str.replace(/([^a-zA-Z])e([^a-zA-Z])/g, "$12.718281828459045$2")

正则表达式没有执行我想要的操作,我也不知道为什么。

因此,我要执行的操作是将未连接到任何Az字母的字符串中的所有“ e”替换为“ 2.718281828459045”,我的正则表达式有什么问题?

"2e" -> "2e", should be: "22.718281828459045"
"2e2" -> "22.7182818284590452", working
"2*e*e*2" -> "2*2.718281828459045*e*2", should be "2*2.718281828459045*2.718281828459045*2"
阿尔克桑德(Alxandr)

这里的问题是第一个不匹配,因为后面没有任何内容e,因此它必须检查e后面是否跟字母输入结尾无关的内容但是,第三个示例不起作用,因为在2*e*e*2第一个匹配中是*e*,因此两者*都是“消耗的”,因此字符串的剩余内容仅为e*2这显然不能解决问题。

可以代替使用的是负面的超前预测。它们a(?!b)以正则表达式编写,并且(在这种情况下)表示aa后面没有a b因此,我们将正则表达式放入([^a-zA-Z])e(?![a-zA-Z)但是,它仍然与简单字符串不匹配e,因为它前面没有任何内容。在不是JavaScript的情况下,我们可以在后面使用负数,尽管js不支持此功能,所以只需将其更改为即可(^|[^a-zA-Z])e(?![a-zA-Z])

含义是:查找e在字符串开头或在非az或AZ之后且之后没有az或AZ的任何内容。

这是工作示例:http : //regex101.com/r/wQ1oW3/3(请注意,我用替换了<input>,因为更容易看到替换是正确的。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章