【问题标题】:Delete part of string between { and | in JavaScript [closed]删除 { 和 | 之间的部分字符串在 JavaScript [关闭]
【发布时间】:2020-09-20 03:00:14
【问题描述】:

目前我得到的字符串如下所示:

我喜欢早餐吃{{Pizza|Pasta}}。

我想在 JS 中操作字符串,使它们只包含 '|' 之后的部分这样句子就变成了

我喜欢早餐吃意大利面。

到目前为止,这段代码给我带来了一个公平的结局。

str.replace(/\{\{.*?\|.*?\}\}/g, "");

但如果我有这样的字符串:

我早餐吃 {{bread}} 和 {{cereal|yoghurt}}。

结果是:

我早餐吃酸奶。

但我想要:

我早餐吃面包和酸奶。

到目前为止,我已经尝试过使用正则表达式。但它似乎并没有取代任何东西。

str.replace(/\{\{.*((?!]).).*?\|(.*?)\}\}/g, "");

【问题讨论】:

标签: javascript regex string replace


【解决方案1】:

这是正则表达式的完美用例。您可以使用一个来查找所有出现的{{...|...}} 并将它们替换为|}} 之间的部分

let string = "I like {{Pizza|Pasta}} for breakfast and {{Pasta|Pizza}} for lunch."

console.log(string.replace(/\{\{.*?\|(.*?)\}\}/g, "$1"));

他们在那里,多个占位符:D

感谢您的帮助,但不幸的是我遇到了另一个问题。如果我有字符串“我早餐吃 {{bread}} 和 {{yoghurt|cereal}}”,它将导致“我早餐吃麦片,但我不希望面包部分消失。

这样做是因为您在这里更改了占位符的模式。从 {{...|...}} (上面的正则表达式涵盖的内容)| 分隔的 {{...}} 内的条目列表。

基本上有两种方法可以解决这个问题。

更改正则表达式以反映该列表:

let string = "I eat {{bread}} and {{yoghurt|cereal}} for breakfast"

console.log(string.replace(/{{(?:.*?\|)*?([^|]*?)}}/g, "$1"));

或者我们使用正则表达式更简单一些,让函数处理其内容:

let string = "I eat {{bread}} and {{yoghurt|cereal}} for breakfast"

console.log(string.replace(
  // the placeholder is simply `{{....}}`
  /{{(.*?)}}/g, 
  // the function takes the content between `{{` and `}}` 
  // splits it by `|` and returns the last item
  (match, content) => content.split("|").pop()
));

【讨论】:

  • 这非常适合我!谢谢。
  • 大括号不需要转义,不需要加问号,console.log(string.replace(/{{.*\|(.*)}}/g, "$1"));就可以了
  • @SaymoinSam 我对大括号感到惊讶,因为它们用于间隔/\d{3,5}/,因此是语法元素imo。但你似乎是对的。 “...您也不需要添加询问标记” 也不需要g 标志。除非你想支持多个匹配。然后你会遇到贪婪的.* 选择器的麻烦。如果没有询问标记,正则表达式将匹配从第一个 {{ 到最后一个 }} 的所有内容作为单个匹配项。
  • 啊我没看到全局修饰符g
  • 没问题。这不是OP的要求,但从个人经验来看,它很快就会成为要求。而且它太简单了,无法包含。
【解决方案2】:

试试这个:

var text = '{{Pizza|Pasta}}';
var replaced = text.replace('{{','').replace('}}','').split('|')[1];
var final = 'I like '+replaced+' for breakfast';
console.log(final);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多