作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有快速的正则表达式方法或类似的方法可以将字符串解析为双花括号中的位不(我们称它们为“静态”)和是 在双花括号中(让我们称之为“动态”)?
例如输入:
Lorem {{ipsum dolor sit}} amet, {consectetur} adipiscing {{elit}}.
要求的输出:
[
{
type: "static",
value: "Lorem "
},
{
type: "dynamic",
value: "ipsum dolor sit"
},
{
type: "static",
value: " amet, {consectetur} adipiscing "
},
{
type: "dynamic",
value: "elit"
},
{
type: "static",
value: "."
},
]
到目前为止,我最好的尝试是使用 /\{*([^{}]+)\}*/g
作为正则表达式并使用 while
循环> 和 exec
但它错误地将 任何 个大括号识别为动态值,如下所示:
function templateParser(string) {
const re = /\{*([^{}]+)\}*/g;
const output = [];
while (true) {
const match = re.exec(string);
if (!match) {
break;
}
const [templateItem, templateKey] = match;
output.push({
type: templateItem === templateKey ? "static" : "dynamic",
value: templateItem === templateKey ? templateItem : templateKey
});
}
return output;
}
console.log(
templateParser(
"Lorem {{ipsum dolor sit}} amet, {consectetur} adipiscing {{elit}}."
)
);
最佳答案
区分{{
this
}}
和 that
capture 的想法this
但匹配 that
。
{{(.*?)}}|.+?(?={{|$)
{{
或最多 the end .See this demo at regex101或 JS-demo at tio.run
使用 exec
您的值可以很容易地根据例如m[1]!=null
(第一组匹配)。当然这与你的示例数据有关。假设没有嵌套并且没有猜测任何其他内容。
关于javascript - 如何使用 JavaScript 解析带有双大括号的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73026239/
我是一名优秀的程序员,十分优秀!