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

标签 javascript regex

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

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

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

所以我想做的是将字符串中未连接到任何 A-z 字母的所有“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)在正则表达式中 and (在本例中)表示 a后面没有 b 。所以我们将正则表达式设置为 ([^a-zA-Z])e(?![a-zA-Z) 。但是,这仍然与简单字符串 e 不匹配。 ,因为它前面什么都没有。在非 JavaScript 中,我们可以使用负向后查找,尽管 js 不支持这一点,所以只需将其更改为 (^|[^a-zA-Z])e(?![a-zA-Z]) .

含义是:查找任何e位于字符串的开头,或者在不是 a-z 或 A-Z 的内容之后,并且后面没有 a-z 或 A-Z。

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

关于Javascript - RegExp - 替换未被字母包围的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26439658/

相关文章:

c# - 删除第一个字母后的所有内容

javascript - 从 iframe 中的变量打开链接

javascript - 是否可以重命名 cordova 插件?

mysql - 如何在mySQL搜索中搜索独立的单词?

java - 如何执行网络抓取以在 Google App Engine 上查找 Java 中的特定链接页面?

python - 解析srt字幕

javascript - Node : Pass array and display the values on html page

javascript - contenteditable,在文本末尾设置插入符(跨浏览器)

javascript - 仅在Express中针对某些路由运行中间件的模式

regex - 正则表达式查找/替换的用例