【问题标题】:How can i split strings that has prefix and suffix in Javascript?如何在Javascript中拆分具有前缀和后缀的字符串?
【发布时间】:2021-09-16 16:44:45
【问题描述】:

我有一个以这种形式存储在变量中的字符串:

var c = "<p>Let's try with single inputs : *[]*</p>"

我可以使用这种方法轻松地将*[]*拆分并转换为&lt;span&gt;[a]

var res = c.split("*[]*");
if(res.length > 1){
  var strContent = res[0];
  var inptSoal = ' <span id="content-input" class="al question mb-0">[ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]</span> ';
  strContent += inptSoal;
  strContent += res[1];

  c = strContent;
} return c;

但是现在,假设我有这种形式的字符串 [b]

var c = "<p>Let's try with 2 inputs : *[Input 1]* and *[Input 2]*</p>"

如何将每个 *[]*(其中包含字符串)拆分(和转换)为 HTML &lt;span&gt; 元素?提前致谢


编辑

为了更清楚,使用我上面写的 方法 ([a]) 它将在我的网站中返回:

如果条件类似于我上面提到的第二种形式 ([b]),我想要做的是返回相同的结果。我怎样才能做到这一点?


已解决

这里的每个答案都解决了我的问题。这里的第一个答案是Ofek 的答案。它运作良好,我需要做的只是将replace() 函数内的"&lt;span&gt;" + input + "&lt;/span&gt;" 更改为:

"&lt;span id='content-input' class='al question mb-0'&gt;" + input + "&lt;/span&gt;" 使 span 元素具有我上面截图的 CSS 样式。

其他两个答案,sid 的答案和Rahul Kumar 的答案也很有效。但我更喜欢选择Rahul Kumar 的简单答案。

提前感谢所有回答我问题的人!

【问题讨论】:

  • 您能否通过一些具有预期转换结果的输入示例来完成这个问题?尚不清楚*[]* 之间的子字符串是否必须被&lt;span&gt;&lt;/span&gt; 包围或只是替换。是否可以使用嵌套括号:*[str1*[str2]*str3]*?
  • @AleksandrBaklanov 嗨,感谢您的评论,我已经更新了我的问题。你介意再看看吗?

标签: javascript html jquery split


【解决方案1】:

使用regex 匹配模式并将其传递给String.replace() 方法以用新字符串&lt;span&gt;$1&lt;/span&gt; 替换字符串中的匹配模式。这里$1表示捕获的组,它是括号*[...]*内的内容。

str = "<p>Let's try with 2 inputs : *[Input 1]* and *[Input 2]*</p>"
const regex = /\*\[(.*?)\]\*/g;
const finalStr = str.replace(regex, "<span>$1</span>");
console.log(finalStr);

【讨论】:

    【解决方案2】:

    你可以使用这个方法:

    function replaceWithInput(str, replacer) {
      var arr = str.split("*[");
      for (var i = 1; i < arr.length; i++) {
        var index = arr[i].indexOf("]*");
        arr[i] = replacer(arr[i].slice(0, index)) + arr[i].slice(index + 2);
      }
      return arr.join("");
    }
    

    你可以这样使用它:

    function replace(input) {
      return "<span>" + input + "</span>"
    }
    replaceWithInput("<p>Let's try with 2 inputs : *[Input 1]* and *[Input 2]*</p>", replace);
    

    【讨论】:

    • 您好,效果很好,它将每个 [ 替换为 和 ] 替换为 ,不幸的是,这不是我想要实现的,请原谅我的错误。你介意再看看我的问题吗?我已经更新了我的问题
    • 您可以将方法替换为您想要的任何内容。但我看到人们发布了关于正则表达式的帖子,我不知道你可以使用带参数的正则表达式,而且它比我的解决方案更好。
    【解决方案3】:

    你可以使用正则表达式,

    let c = "<p>Let's try with 2 inputs : *[Input 1]* and *[Input 2]*</p>";
    
    let newC = c.replace(/\*([[])/g, '<span>');
    let newC2 = newC.replace(/\]([*])/g, '</span>');
    
    console.log(newC2);
    

    【讨论】:

      猜你喜欢
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2013-02-12
      相关资源
      最近更新 更多