正则表达式替换第一行中的特定字符

3

我认为这是一件非常简单的事情,但我在网上找不到答案。我找到了如何匹配多行字符串中的第一行的全部内容的结果,但没有找到如何仅在第一行中查找特定字符的所有出现。

例如:

HelloX dXudXe
How areX yXou?
FxIXne?

仅匹配第一行中的所有大写X,并将其替换为空,结果如下:

Hello dude
How areX yXou?
FxIXne?

这仅匹配前X个:

/X/m

这将匹配所有的X:

/X/g

所以我猜想答案是这些语句的正则表达式版本之一:

"Replace all X characters until you find a newline"
"Replace all X characters in the first line"

这听起来像是一个非常简单的任务,但是它真的这么简单吗?如果是,那么该怎么做呢?我已经花了几个小时寻找解决方案,但我觉得也许我完全不理解正则表达式的逻辑。

作为编程语言?JavaScript。但我希望有一个通用的解决方案,适用于支持正则表达式的任何语言,而不使用任何特定于语言的函数。只需要一个简单的正则表达式“语句”或模式即可。 - James
@James 不同的编程语言有不同的正则表达式变体。例如,在许多语言中,负向后瞻将是解决此问题的方法,但Javascript没有它。 - Barmar
你刚才有没有看到我说的话?Javascript是不支持它的。 - Barmar
那么,在JavaScript中不能以直接的方式完成这个任务吗? - James
@James 这很简单,只是不能用单个正则表达式替换。 - Barmar
显示剩余3条评论
2个回答

4

如果不知道你使用的确切语言,很难给出一个例子,但理论很简单:

如果你有一个复杂的任务,把它分解成小部分。

在这种情况下,你只想对第一行执行某些操作。因此,需要分两步进行:

  1. 确定第一行
  2. 对其执行操作。

以JavaScript为例,你的代码可能是这样的:

var input =
    "HelloX dXudXe" + "\n" +
    "How areX yXou?" + "\n" +
    "FxIXne?";

var result = input.replace(/^.*/,function(m) {
    return m.replace(/X/g,'');
});

看,我是如何先获取第一行,然后操作它的?这种分解问题的能力是一个很好的需要学习的技能;)


你是怎么获取第一行的?由于连结的缘故,input 包含了所有三行。 - Barmar
1
@Barmar /^.*/ 获取第一行。 - Niet the Dark Absol
我只是希望有一个更简单的解决方案。我对正则表达式非常陌生,并且刚开始理解它,所以我想:“嘿,所有语言都必须实现相同的功能,肯定有一个非常简单的解决方案可适用于所有语言。”但看来并非如此。我已经想到了与此类似的东西,但如果在JavaScript中没有单一的正则表达式模式,则没关系。谢谢! - James
@James 相信我,使用正则表达式时,最简单的解决方案总是将其分解,而不要一次尝试做太多事情 ;) - Niet the Dark Absol
除了第一行以外的所有行怎么样? - leonard vertighel

0
将字符串拆分成多行,在第一行进行替换,然后重新连接它们。
var lines = input.split('\n');
lines[0] = lines[0].replace(/X/g, '');
input = lines.join('\n');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接