【问题标题】:How to remove characters from string using regex如何使用正则表达式从字符串中删除字符
【发布时间】:2020-05-04 13:38:17
【问题描述】:

我想从以下字符串中删除<< any words #_

stringVal = "<<Start words#_ I <<love#_ kind <<man>>, <<john#_ <<kind man>> is really <<great>> <<end words#_ ";

结果为:

Start words I love kind <<man>>, john <<kind man>> is really <<great>> end words

我试过这样:

stringVal = stringVal.replace(/^.*<<.+\#_.*$/g, "");

但它会删除所有字符串。

注意:&lt;&lt; any words #_可能存在multiple时间在字符串的开头、中间或结尾

【问题讨论】:

  • @Andreas,谢谢你的评论,我检查了它和我的一样
  • 不是&lt;&lt;john#_而不是&lt;&lt;john#吗?
  • 我添加评论是因为您的正则表达式的解释应该清楚为什么它会删除所有内容
  • 从您的示例推断您可能正在寻找需要替换为 $1&lt;&lt;(\w+)#,请参阅 a demo on regex101.com

标签: javascript regex reactjs


【解决方案1】:

从您的示例推断,您可能正在寻找:

stringVal = "<<Start words#_ I <<love#_ kind <<man>>, <<john#_ <<kind man>> is really <<great>> <<end words#_ ";

stringVal = stringVal.replace(/<<([-\w ]+)#_/g, "$1");
console.log(stringVal);

要允许其他字符,请将\w+ 更改为例如[-\w ]+.
an additional demo on regex101.com

【讨论】:

  • @Muhammad:不,那你需要把表达式改成[-\w ]+,如最后答案中所说。
  • 谢谢你,现在只在startend 不起作用:like -&gt; &lt;&lt;#hello_ I &lt;&lt;lo and ve#_ kind &lt;&lt;man&gt;&gt;, &lt;&lt;john#_ &lt;&lt;kind man&gt;&gt; is really &lt;&lt;great&gt;&gt; &lt;&lt;#he llo
  • @Muhammad:请编辑您的问题并将所有需要的条件放入其中。
【解决方案2】:

您可以不使用.+\#_,而要匹配any words,您可以通过匹配空格和单词字符来匹配可选重复的单词字符。

<<(\w+(?: \w+)*)#_

Regex demo

在替换使用组1$1

请注意,您不必转义#

const regex = /<<(\w+(?: \w+)*)#_/g;
stringVal = "I <<love#_ kind <<man>>, <<john#_ <<kind man>> is really <<great>>";
const result = stringVal.replace(regex, '$1');

console.log(result);

【讨论】:

  • 非常感谢,您的回答很好,而且@Anreas 的&lt;&lt;(\w+)#_ 也很好
  • @Jan,如果有空间不工作是对的,我投票支持努力谢谢
  • @Muhammad 如果可以有任何单词作为复数形式,这可能是另一种选择 &lt;&lt;(\w+(?: \w+)*)#_ regex101.com/r/kh5ktF/1 如果单词中不能有下划线,只能在 # 之后也可以选择&lt;&lt;([^\W_]+(?: [^\W_]+)*)#_regex101.com/r/eoyrYB/1
猜你喜欢
  • 2021-09-07
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
相关资源
最近更新 更多