我有这样一个正则表达式:
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"
这里的问题是第一个不匹配,因为后面没有任何内容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] 删除。
我来说两句