JavaScript 回溯正则表达式
javascript lookback regex
我想替换字符串中所有前面没有_
数字1
的字母。
所以
jj*_sin(jj)+_cos(hh)
应该是
1*_sin(1)+_cos(1)
如何使用正则表达式回溯或任何其他方法实现它。
使用如下所示的负面前瞻断言。
(?!_)'b[a-z]+
然后将匹配的字符替换为1
演示
> "jj*_sin(jj)+_cos(hh)".replace(/(?!_)'b[a-z]+/g, "1")
'1*_sin(1)+_cos(1)'
或
var str = "jj*_sin(jj)+_cos(hh)";
snippet.log("Before: " + str);
str = str.replace(/(^|[^_])'b[a-z]+/g, "$11");
snippet.log("After: " + str);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
'b
单词边界是上述正则表达式中的重要内容,它在单词字符和非单词字符之间匹配。 (^|[^_])
捕获行的开头或非下划线的字符。 'b
在这里很重要,因为如果没有'b
,它将匹配像这样的字符串9foo
。 'b
确保字母表前面有非单词字符或起始锚点。 [a-z]+
匹配一个或多个小写字母。因此,通过将所有匹配的字符替换为组索引 1 内的字符加上一个数字1
将为您提供所需的输出。
你可以
用String#replace
和正则表达式来做到这一点,但正如nhahtdh在评论中指出的那样,它很可能只能让你走到这一步。你最好构建一个解析器,可能使用 Jison 或任何其他解析器生成器。
执行此操作的方法是使用捕获组和回调函数:
var str = "jj*_sin(jj)+_cos(hh)";
snippet.log("Before: " + str);
str = str.replace(/(_?)([a-zA-Z]+)/g, function(m, c0, c1) {
return c0 === "_" ? m : c0 + "1";
});
snippet.log("After: " + str);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
1*_sin(1)+_cos(1)
var str = "jj*_sin(jj)+_cos(hh)";
snippet.log("Before: " + str);
str = str.replace(/(_?)([a-zA-Z]+)/g, function(m, c0, c1) {
return c0 === "_" ? m : c0 + "1";
});
snippet.log("After: " + str);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 为什么在 javascript 中将正面回溯捕获为正则表达式匹配的一部分
- 在谷歌浏览器中学习正则表达式回溯
- JavaScript 回溯正则表达式
- 如何使正则表达式不会导致“灾难性回溯”
- 如何使此正则表达式不会导致“灾难性回溯”
- javascript中的正则表达式回溯