【问题标题】:RegExp to Parse and replace specific Words正则表达式解析和替换特定单词
【发布时间】:2018-08-30 19:53:40
【问题描述】:
  • 我的输入:Fwd: [ProQuest Alert] test fwd:TestFwd: test2fwd: fwd:test3 Fwd: fwd:
  • 我的输出需要是:test fwd:TestFwd: test2fwd: fwd:test3
  • 我的错误(解析)输出:test TestFwd: test2fwd: test3

我想删除单词 Fwd:[ProQuest Alert](方括号之间的字符串)而不是 Fwd: 那是字符串文本的一部分

解释:

\[(.*?)\] -> 提取方括号之间的文本(全局正则表达式)

\b 表示单词边界,它是“单词字符”([A-Za-z0-9_]) 范围内的字符与任何其他字符之间的(零宽度)点

这是我的正则表达式:

 ?\b(Fwd:)|\[(.*?)\] ?

演示:https://regex101.com/r/qlTpWb/7

    var str = "Fwd: [ProQuest Alert] test fwd:TestFwd: test2fwd: fwd:test3 Fwd:";
    str = str.replace(/ ?\b(Fwd:)|\[(.*?)\] ?/gi, ' ');
    console.log(str)

【问题讨论】:

  • 我会使用 \s 转义字符作为空格字符,因为它可以更明确地看到它是正则表达式开头的空格(而不是错误的空格)。
  • 为什么不简单地将^.*]\s? 用于您的正则表达式? JSFiddle.
  • @AminNAIRI 我想删除所有 Fwd: 没有与其他字符串文本连接的所有文本字符串以及方括号之间的所有文本字符串,您的示例只需删除方括号和字符串括号之前的字符串跨度>
  • @MokiNex 好的,所以在你的问题中添加这个约束,否则,通过删除 i 标志,你会得到预期的输出

标签: javascript regex


【解决方案1】:

这个正则表达式呢?

var str = "Fwd: [ProQuest Alert] test fwd:TestFwd: test2fwd: fwd:test3 Fwd:";
str = str.replace(/\b(Fwd:)(\s|$)|\[(.*?)\]/gi, ' ');
console.log(str)

我只在 regex101.com 中尝试过。

【讨论】:

  • 非常感谢!是的,这是完美的答案
  • 只需在正则表达式的最后添加 \s* 以匹配任何空白字符(等于 [\r\n\t\f\v ])
【解决方案2】:

一种解决方案是匹配您不想要的内容并捕获您想要删除的内容:

keep_me1|keep_me2|(delete_me)

a demo on regex101.com


由于不支持lookbehinds 和(*SKIP)(*FAIL),您需要一些编程功能:

let data = 'Fwd: [ProQuest Alert] test fwd:TestFwd: test2fwd: fwd:test3 Fwd: fwd:';
let regex = /\w+:\w+|(\[[^\[\]]+\]|\bFwd:)/gi

data = data.replace(regex, function(match, group1) {
    if (typeof(group1) == "undefined") {
        return match;
    } else {
        return '';
    }
});
console.log(data);

【讨论】:

  • 您的输出包含单词 fwd: 并且不符合要求。
  • 谢谢,但仍然错误输出需要是test fwd:TestFwd: test2fwd: fwd:test3
  • @MokiNex: 最后出价:)
猜你喜欢
  • 2019-10-24
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多