【问题标题】:regex — matching without trailing charactersregex — 匹配没有尾随字符
【发布时间】:2013-12-31 04:04:38
【问题描述】:

我正在尝试匹配以下内容(这些都是单独的字符串):

'Los Angeles, CA'
'New York, NY'
'Williamsburg, *lyn, NY'

来自以下字符串:

'Los Angeles, CA 90001, USA'
'New York, NY 10017, USA'
'Williamsburg, *lyn, NY, USA'

我正在使用 JavaScript。到目前为止,我有:

var re = /.+[A-Z]{2}( |,)/,
    location = '',  // Address string here
    substring = location.match(re)[0];  // Returns something like Williamsburg, *lyn, NY,

虽然此正则表达式将匹配上面的字符串示例,但我会留下一个尾随空格或逗号,具体取决于字符串。我可以slice() 尾随字符,但我很好奇这是否可以在正则表达式本身内完成。这可能吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以使用Positive Lookahead 代替捕获组( ),它最多匹配空格字符或逗号,而不会使它们中的任何一个成为匹配的一部分。

    var re = /.+[A-Z]{2}(?= |,)/
    

    Live demo

    【讨论】:

      【解决方案2】:

      另一种方法是使用单词边界.+\b[A-Z]{2}\b

      【讨论】:

        【解决方案3】:

        其他方式:

        substring = location.split(/([A-Z]{2})/, 2).join('');
        substring = location.slice(0, location.search(/[A-Z]{2}/) + 2);
        

        【讨论】: