Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何替换nodejs中regex中的几个值?_Node.js_Regex - Fatal编程技术网

Node.js 如何替换nodejs中regex中的几个值?

Node.js 如何替换nodejs中regex中的几个值?,node.js,regex,Node.js,Regex,我有一个句子,在{#val#}的位置,可以有5以内的任何值。而且 我需要删除特殊字符,除了下面给出的句子中的少数字符。我试着做下面的事情 var separators = ["#val#", "#VAL#", "#vaL#", "#vAl#", "#Val#"]; let sentence = "Hi {#VAL#}, Thank you {#val#}{#val#} for &

我有一个句子,在{#val#}的位置,可以有5以内的任何值。而且 我需要删除特殊字符,除了下面给出的句子中的少数字符。我试着做下面的事情

var separators = ["#val#", "#VAL#", "#vaL#", "#vAl#", "#Val#"];
let sentence = "Hi {#VAL#}, Thank you {#val#}{#val#} for &visting us!";
separators.forEach((str) => {
   regexString = regexString.replace(new RegExp(`{${str}}`, "g"), ".{0,5}"); //Replacing val with .{0,5}
});
我试图使用三元运算符,以便只替换除{0,5}之外的特殊字符,但这似乎不起作用

regexString = regexString.replace(/([&\/\\,+()$~%'":?<>_;||`~!^@=+{}\[\]\-])/g,(x,z) => {
  x == ".{0,5}" || x == "\s" ? "" :".{0,5}"
})
regexString=regexString.replace(/([&\/\,+()$~%'”:?| | `~!^@=+{}\[\]\-])/g,(x,z)=>{
x=“{0,5}”| | x=”\s“:“{0,5}”
})
请在这方面帮助我。

如果您想删除特殊字符,可以使用您只需要的
[!-\/:-@[-
{-~]`模式(请参阅)匹配

var分隔符\u regex=/{{val}}{124;([!-\/:-@[-`{-~])/gi;
让我们说一句话:“嗨{{瓦尔},谢谢你{{瓦尔}{{瓦尔}来看我们!”;
句子=句子。替换(分隔符_regex,(x,y)=>y?”:“{0,5}”);
console.log(句子);
要删除的特殊字符可以与您只需要的
[!-\/:-@[-
{-~]`模式匹配(请参阅)

var分隔符\u regex=/{{val}}{124;([!-\/:-@[-`{-~])/gi;
让我们说一句话:“嗨{{瓦尔},谢谢你{{瓦尔}{{瓦尔}来看我们!”;
句子=句子。替换(分隔符_regex,(x,y)=>y?”:“{0,5}”);
console.log(句子);
据我理解:

const separators = ["#val#", "#VAL#", "#vaL#", "#vAl#", "#Val#"];
const sentence = "Hi {#VAL#}, Thank you {#val#}{#val#} for &visting us!";

const replace = (string) => {
  const staticRegex = new RegExp(/[^a-zA-Z {.}]+(?![^{]*})/, "gi")
  separators.forEach((str) => {
    const dynamicRegex = new RegExp(`{${str}}`, "gi");
    string = string.replace(dynamicRegex, ".{0,5}");
  });
  return string.replace(staticRegex, "");
};

console.log(replace(sentence)); /* output :
Hi .{0,5} Thank you .{0,5}.{0,5} for visting us
*/
添加了O.Jones建议的
i
(不区分大小写)修饰符。
也许不是最“大O效率”的方式,但我希望它能回答你的问题

/e:在你的评论之后编辑

  • 我们保留了通过分隔符数组进行迭代的想法:这是
    dynamicreex
  • 一旦我们完成了迭代,我们就使用第二个。这是一个稍微编辑过的版本
    • 据我所知:

      const separators = ["#val#", "#VAL#", "#vaL#", "#vAl#", "#Val#"];
      const sentence = "Hi {#VAL#}, Thank you {#val#}{#val#} for &visting us!";
      
      const replace = (string) => {
        const staticRegex = new RegExp(/[^a-zA-Z {.}]+(?![^{]*})/, "gi")
        separators.forEach((str) => {
          const dynamicRegex = new RegExp(`{${str}}`, "gi");
          string = string.replace(dynamicRegex, ".{0,5}");
        });
        return string.replace(staticRegex, "");
      };
      
      console.log(replace(sentence)); /* output :
      Hi .{0,5} Thank you .{0,5}.{0,5} for visting us
      */
      
      添加了O.Jones建议的
      i
      (不区分大小写)修饰符。
      也许不是最“大O效率”的方式,但我希望它能回答你的问题

      /e:在你的评论之后编辑

      • 我们保留了通过分隔符数组进行迭代的想法:这是
        dynamicreex
      • 一旦我们完成了迭代,我们就使用第二个。这是一个稍微编辑过的版本

      正则表达式上的
      i
      修饰符使匹配大小写独立。在我看来,这可能会简化您的问题。正则表达式上的
      i
      修饰符使匹配大小写独立。在我看来,这可能会简化您的问题。感谢您的输入,但我想删除像{,}这样的特殊字符输出应该是嗨。{0},5},{0},{5}。{0},5}。请帮助我解决这个问题,但是如果我们包括{在句子中间某个地方,它是不被替换的。例如,const句子=“H{{ValVal}}},谢谢Y{{V.Val}}{{Val}}} { V}}},谢谢。{0},{0},{5}。{0},{5}。{0},5}。{0},和…………{{0} }。谢谢你的输入,但是我想要删除{{0}}之类的特殊字符。{0},5}。我的输出应该是嗨。{0},5},谢谢你。{0},5}。{0},5}。{0,5}谢谢你{0,5}.{0,5}.{0,5}谢谢你访问我们谢谢你的输入,但我想删除像{,},&,&,…..这样的特殊字符,除了{0,5}。我的输出应该是Hi。{0,5},谢谢。{0,5}.{0,5}谢谢你来看我们。请帮我实现this@sai查看更新。@sai我的当前代码产生了一个不同的结果:
      嗨。{0,5}谢谢。{0,5}。{0,5}感谢您访问我们
      @sai您可以添加尽可能多的条件。在
      (x,y,z)=>…
      x
      是整个匹配项,其余的按regex模式中的出现顺序捕获组值。@sai在
      /{val}}([\s?])中([!-\/:-@[-`{-~])/gi
      regex,第1组匹配您要保留的
      或空白,因此,在回调参数中是
      y
      。使用
      .replace(分隔符_regex,(x,y,z)=>y?y:z?”:“{0.5}”);
      谢谢您的输入,但我想删除的是像{,},&,!…这样的特殊字符,除了{0,5}。我的输出应该是Hi。{0,5},谢谢。{0,5}。{0,5}访问我们。请帮助我实现this@sai查看更新。@sai我的当前代码产生了一个不同的结果:
      嗨。{0,5}谢谢。{0,5}。{0,5}感谢您访问我们
      @sai您可以添加尽可能多的条件。在
      (x,y,z)=>…
      x
      是整个匹配项,其余的按regex模式中的出现顺序捕获组值。@sai在
      /{val}}([\s?])中([!-\/:-@[-`{-~])/gi
      regex,第1组匹配要保留的
      或空白,因此在回调参数中是
      y
      。使用
      。替换(分隔符_regex,(x,y,z)=>y?y:z?”:“{0.5}”);