删除字符串的开头,直到找到一个字符

时间:2019-03-16 19:14:26

标签: javascript

我有这个字符串:

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}}" 
}

2 个答案:

答案 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 %>