【问题标题】:What is the Regular Expression to match the space between two words (lower case and upper case)什么是正则表达式来匹配两个单词之间的空格(小写和大写)
【发布时间】:2018-03-15 01:35:05
【问题描述】:

我在谷歌表格中有一个数据集,其中“名称”字段如下所示:

Stephen & Sally Fitzpatrick

我正在尝试找出正则表达式来查找“Sally Fitzpatrick”之间的空格,以便将其拆分为姓名和姓氏。这样,Stephen 和 Sally 将保留在姓名字段中,而 Fitzpatrick 将成为姓氏。

但问题的范围只是找到那个空间,而不是分割它。

我相信它是一个相当新的编译器,所以支持\s、\b、\w。

【问题讨论】:

  • 匹配名称并非易事,因为您正在考虑的名称组合要多得多。我猜你在想[a-z] [A-Z] 之类的东西,但是当你第一次遇到von Braun 时,这会分崩离析
  • 是的,好点@MattBurland
  • 正如马特所说,解析名称字符串并不简单,有很多不同的形式。 Sally Ann、Sarah Jane 和 Sue Saxe-Coburg 和 Gotha 怎么样? ;-)

标签: javascript regex google-sheets


【解决方案1】:

您可能正在寻找类似于/(\S+\s\&\s\S+)(\s)(\S+)/ 的内容。

分解:

  • 获取第一个字符串、空格、& 和空格以及第二个字符串,并将所有这些组合为第一组
  • 抓住SallyFitzpatrick 之间的空间并将其视为一个组
  • 单独获取第三个字符串,并将其视为一个组

这可以在下面看到:

let string = 'Stephen & Sally Fitzpatrick';
console.log(string.split(/(\S+\s\&\s\S+)(\s)(\S+)/).filter(Boolean));

请注意,这将匹配所有三个组件;您可以通过在括号内添加?: 来排除您不想要的那些。对第一组和第三组执行此操作会产生相关空间:

let string = 'Stephen & Sally Fitzpatrick';
console.log(string.split(/(?:\S+\s\&\s\S+)(\s)(?:\S+)/).filter(Boolean));

【讨论】:

  • 谢谢。就是这样!
【解决方案2】:

一种使用环视的可能解决方案:

/(?<=[A-Za-z])\s(?=[A-Za-z])/.exec('Stephen & Sally Fitzpatrick')

// -> [" ", index: 15, input: "Stephen & Sally Fitzpatrick", groups: undefined]

const [first, last] = 'Stephen & Sally Fitzpatrick'.split(/(?<=[A-Za-z]) (?=[A-Za-z])/);

console.log(`first: ${first}, last: ${last}`);

检查lookbehind proposal

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多