我有这个字符串:
const string ="{* * test * { * username: {{username}} * } }";
最后我想要这样的东西:
"{\n\t\"username\": \"{{username}}\" \n}"
我正在尝试删除字符串的第一部分,直到找到字符"{"
。当然,第一个应该被忽略。
这是我正在尝试的代码:
const deleteFirstLastCharacter = string.substr(1).slice(0, -1);
const deleteFirstPart = deleteFirstLastCharacter.split("* * test *").pop();
const replace = deleteFirstPart.replace(/\*/g, "\n\t");
我得到的输出:
{
username: {{username}}
}
我想要的输出: 为了让它看起来像这样:
{
"username": "{{username}}"
}
答案 0 :(得分:4)
如果语法不变,则可以使用Regex:
.* \{ \* ([^:]+): ([^ ]+) \* } }
第一个.*
要与{* * test *
匹配。
剩下的是捕获字段的名称(用户名),然后捕获其值,然后是星号和大括号。
匹配时,您可以将其替换为:
{\n\t"$1": "$2"\n}
哪个给出以下输出:
{
"username": "{{username}}"
}
这是一个片段:
const string = "{* * test * { * username: {{username}} * } }";
let output = string.replace(/.* \{ \* ([^:]+): ([^ ]+) \* } }/, '{\n\t"$1": "$2"\n}')
console.log(output)
在此尝试此正则表达式:https://regex101.com/r/FbJzRE/1
答案 1 :(得分:1)
让我添加一个不使用正则表达式的解决方案。您的问题是,在{和}的两种情况下,您需要\ n和\ t的顺序不同,因此无法像您尝试的那样一次替换。
尝试:
<%= form_with model: @bug do |form| %>
<%= form.select :owner, @users %>
<%= form.text_field :title, placeholder: "title" %>
<%= form.text_area :description, placeholder: "description" %>
<%= form.submit %>
<% end %>