【问题标题】:RegEx to remove unwanted character patternsRegEx 删除不需要的字符模式
【发布时间】:2020-05-14 08:52:31
【问题描述】:

我需要从字符串中删除一些字符。但是,有一些限制。

示例短语

有两个“@planes”,它们的构建方式几乎“相同”。

我需要找到模式'@ 和下一个'。这些字符需要从字符串中删除。但是,如果只有一个' 或只有一个@,它们应该保持不变。澄清一下,字符串可以包含一个或多个单词,开头用'@'括起来,结尾用一个''括起来。需要删除封闭字符。

删除字符后应该是这样的:

有两架飞机在建造方式上几乎相同。

另一个例句:

“@computer”有时可能非常“@expensive in price”,但在其他情况下它可能是@cheap 甚至免费的。

去掉字符后应该是这样的:

一台计算机的价格有时可能非常昂贵,但在其他情况下,它可能是@cheap 甚至是免费的。

正则表达式应该在 JavaScript 中工作。

【问题讨论】:

    标签: javascript regex character


    【解决方案1】:

    /'@([a-z0-9\s]+)'/gi 适合你吗?

    "A '@computer' can sometimes be very '@expensive in price' but in other cases it can be @cheap or even free'.".replace(/'@([a-z0-9\s]+)'/gi, '$1');
    

    您可以查看https://regex101.com/ 以获取有关正则表达式本身的详细说明。

    【讨论】:

    • 给定的解决方案似乎按预期工作。我对正则表达式完全陌生。提供的表达式正确匹配我正在寻找的内容。但是,在替换匹配的序列时,我对 '$1' 感到困惑。据我所知,您可以通过添加()[a-z0-9\s]+ 进行分组,这样您以后可以用分组后的序列替换整个序列。那是对的吗? '$1' 是如何指代群的?
    • @NIcolas_V 基本上是$n 告诉replace 插入第n 个子字符串匹配。您可以查看developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…,“将字符串指定为参数”部分。我认为它也可能是$&,但我使用$1,即使实际上只有一组,我知道为什么:-)
    【解决方案2】:

    这个应该做你需要的:/'@([^']*)'/g

    1. 寻找'@(对应部分:'@
    2. 它将每个字符(不是')分组(对应部分:([^']*)
    3. 它将' 附加到找到的匹配项以进行替换

    str.replace(regex, '$1'); 中的 $1 引用了在步骤 2 中创建的组

    例子:

    const regex  = new RegExp("'@([^']*)'","g");
    
    const testStr = "A '@computer' can sometimes be very '@expensive in price' but in other cases it can be @cheap or even free'.";
    
    const result = testStr.replace(regex, '$1');
    
    console.log(result);

    【讨论】:

    • 似乎与@vitkarpov 的解决方案非常相似。 +* 量词之间有什么区别?
    • 嘿,添加了一些解释...+* 之间的区别:+ = 一个或多个字符,* = 零个或多个字符...当然类似(这是同样的问题),但是 vitkarpov 只允许字母数字字符串和空格,同时我的解决方案也允许任何其他字符;)
    猜你喜欢
    • 2011-09-28
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    相关资源
    最近更新 更多