【问题标题】:how to replace/append text between a pattern in JavaScript如何在 JavaScript 中的模式之间替换/附加文本
【发布时间】:2021-06-30 14:21:21
【问题描述】:

我想在模式之间重新插入一个字符串

假设我的输入字符串是

var st= "include('sometxt.abc')";
var st2 = "include('somename.xyz')";

我想替换每个包含中的文本,例如 我对上述输入的输出将是

"include('folder/sometext.abc')"
"include('folder/sometxt.abc')"

但是,我可以使用模式搜索字符串,但不知道如何替换, 搜索模式是

/include\("\w+.\w+"\)/g

thnakyou.

【问题讨论】:

  • 您应该捕获更少的文本并使用捕获组。正则表达式:(include\(') 替换:$1folder/。请参阅regex101.com/r/5RiwLL/1 并使用代码生成器按钮。

标签: javascript regex string ejs


【解决方案1】:

一些备注:

  • 您的正则表达式与示例不匹配,因为引用不同。
  • 文件名可以包含与\w 不匹配的字符。这可能太拘束了。

您可以使用捕获组来匹配插入点之前和之后的部分(对于“文件夹/”)。您可以使用反向引用来要求开始和结束引号的类型相同。

我们可以想象更多的检查,但有了这些成分你可以做:

var input = `include('sometxt.abc')
include('somename.xyz')`;

let result = input.replace(/(\binclude\((['"]))(\S+\.\S+\2\))/g, "$1folder/$3");

console.log(result);

【讨论】:

    【解决方案2】:

    您可以使用positive lookahead 获取要插入文本的位置。

    /(?=[a-zA-Z]+?\.)/
    

    var st = "include('sometxt.abc')";
    var st2 = "include('somename.xyz')";
    
    const result = st.replace(/(?=[a-zA-Z]+?\.)/, "folder/");
    
    console.log(result);

    【讨论】:

      【解决方案3】:

      既然你想在之前第一个'插入一些东西,为什么不使用indexOf来获取那个字符的索引,然后使用substr在那个字符之后“插入”它?

      例子:

      var st= "include('sometxt.abc')";
      var st2 = "include('somename.xyz')";
      
      console.log(insert(st));
      console.log(insert(st2));
      
      function insert(to, what = 'folder/') {
        let posOfFirstQuote = to.indexOf("'") + 1;
        return to.substr(0, posOfFirstQuote) + what + to.substr(posOfFirstQuote);
      }

      【讨论】:

      • 我使用了 stst2 变量作为示例和问题的简化,在我的原始字符串中可以有更多的 '" 但是,谢谢你回答我的问题.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      相关资源
      最近更新 更多