【问题标题】:Regular expression to find unknown string and change case in Javascript正则表达式在Javascript中查找未知字符串并更改大小写
【发布时间】:2014-07-17 18:53:32
【问题描述】:

我想在整行上查找上面有空行但在下一行有文本的字符串。然后我希望找到的字符串是大写的。我永远不会提前知道这些名字。 (我在Google Apps Script 中这样做)。

示例文本:

susan jones  
Good morning, children.  How are you today?

Susan jones is a 1st grade school teacher.  bob smith is a plumber.

bob smith  
Hello, Susan.  You are nice.

我想把所有说话人的名字都大写。所以文本将如下所示:

SUSAN JONES  
Good morning, children.  How are you today?

Susan jones is a 1st grade school teacher.  Bob smith is a plumber.

BOB SMITH  
Hello, Susan.  You are nice.

【问题讨论】:

  • ^(\w+ \w+)\s*$ 仅查找 name 和 surname ,因此将其替换为大写,\U\1。通过发现这一点,我们假设用户的文本不仅仅是两个单词
  • 谢谢!实际上,名字可以出现在任何变体中:Susan、Susan Jones、Doctor Susan Jones、Doctor Susan Jones Sr. 等。我尝试过:^((\w+ \w+)|(\w+)|(\w+ \w+ \w+)|(\w+ \w+ \w+ \w+))\s*$ 一直有效,直到它碰到一个结尾有句点的字符串。

标签: javascript regex google-apps-script


【解决方案1】:

如果你想要的是获取前面有空行和文本的行,你可以使用这个:

[\n][\n]([^\n]+)[\n][^\n|\s]

但是,如果名字前没有空行,这将不起作用。 如果使用 javascript,您可以简单地为您的替换方法提供一个函数,该函数以大写形式返回捕获的组 ($1)。

但这对我来说听起来不是一个很好的方法。如果人们的帖子可以有换行符,那么这肯定迟早会出错。

我也不推荐其他假设所有用户都有 2 个名字并且没有人发布 2 个单词的建议。

考虑这个例子:

susan jones  
Good morning, children.  How are you today?

Also BTW
Good evening too...

Susan jones is a 1st grade school teacher.  bob smith is a plumber.

bob smith  
Hello, Susan.  You are nice.

这将使“Also”一词在两种方法中都大写。

你说你将所有这些都作为一个字符串?您没有其他方法可以获取附有更多信息的文本。

当然,如果用户的帖子中不能有换行符,那么这个正则表达式应该适合你。但我仍然认为应该可以找到更好的方法来做到这一点。

【讨论】:

  • 太棒了。我通过 regex101.com 运行它,它还在“早安”中获取“G”,在“晚安”中获取“G”,在“Hello”中获取“H”。有没有办法避免这种情况?否则它可以工作很棒。
  • 它会被突出显示,因为它是匹配的一部分,但它不是捕获组的一部分。注意右边的比赛信息。
  • 太棒了!但是,Google Apps 脚本在这方面遇到了麻烦,因为他们的 findText() 文档指出“JavaScript 正则表达式功能的子集不完全受支持,例如 捕获组 和模式修饰符。”这可以在不使用捕获组的情况下完成吗?这有意义吗?
  • 如果没有可用的捕获组,我想不出办法做到这一点。因为您需要检查下一行是否有文本。我想说捕获组是正则表达式中非常重要的功能,很惊讶它不受支持。
  • 据我了解,您使用的是 javascript 替换方法(但 Google Apps 脚本版本的正则表达式功能较少)。因此,如果仍然可以提供一个方法作为替换参数,我会这样做并在该函数内拆分字符串,以便您只将名称设为大写。在不使用捕获组的情况下,这是我能想到的最佳选择...
猜你喜欢
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 2018-01-15
相关资源
最近更新 更多