正则表达式手柄
Regex Handle Bars
本文关键字:正则表达式 更新时间:2023-09-26
>我有这样的字符串
"{{hello}}{{{how}}}{{are}}{{{you}}}"
我需要编写一个正则表达式来仅替换匹配项
2 braces followed by anything except {}, ends with }}
{{hello}} is valid
{{{how}}} is not. Because it has 3 braces
我尝试[^{}]*{{[^{}]+}}[^{}]*
但似乎不起作用。
有没有办法只获得带有 2 个大括号的匹配项。
例如,如果我想用空字符串替换匹配项。
"{{hello}}{{{how}}{{are}}{{{you}}}"
应该成为
"{{{how}}}{{{you}}}"
alert("{{hello}}{{{how}}}{{are}}{{{you}}}".replace(/(^|[^{])'{'{[^{}]*'}'}(?!'})/g, "$1"))
上面的正则表达式应该与正好由两个大括号包围的字符串匹配。
-
(^|[^{])
应捕获行首或任何字符,但不能捕获大括号的开头。 -
'{'{[^{}]*'}'}
匹配一个双卷曲支撑块,看起来像{{foo}}
,{{bar foo bar}}
-
(?!'})
负面展望,断言比赛后不会有结束大括号。
正则表达式演示
您可以使用
/('B|[^{]){{[^{}]*}}(?!})/g
并替换为 $1
,请参阅此正则表达式演示。
这里的要点是,如果字符串中间的{{...}}
前面有非单词字符/字符串开头('B
)或不是{
字符([^{]
),则应匹配。否则,将找不到连续的匹配项。
JS演示:
var re = /('B|[^{]){{[^{}]*}}(?!})/g;
var str = '{{hello}}{{{how}}}{{are}}{{{you}}}'n{{{hello}}}{{how}}{{are}}{{{you}}}';
document.body.innerHTML += "----- Input ------<br/>" + str.replace(/'n/g, "<br/>");
var result = str.replace(re, '$1');
document.body.innerHTML += "<br/>----- Result ------<br/>" + result.replace(/'n/g, "<br/>");
更新
这是模仿负面回溯的另一种选择:
var str = '{{hello}}{{{how}}}{{are}}{{{you}}}'n{{{hello}}}{{how}}{{are}}{{{you}}}';
var output = str.replace(/({)?{{[^{}]*}}(?!})/g, function($0, $1){
return $1 ? $0 : 'x';
});
document.body.innerHTML = output.replace(/'n/g, "<br/>");
如果在{{
它被捕获到组 1 和回调中之前有一个{
,我们会检查它是否匹配。如果是,只需将整个匹配项放回原处,否则,仅替换找到的匹配项。
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 用于验证JS中逻辑运算符表达式的正则表达式