如何使用正则表达式替换最后一个单词?

时间:2017-06-22 00:58:43

标签: regex swift

我有一个String扩展名:

Hey @jessica @jessica

newString现在等于Hey @jessica。预期结果应为-s

3 个答案:

答案 0 :(得分:0)

使用此正则表达式:

(?<=\s)\S+$

示例:https://regex101.com/r/kGnQEM/1

  

/(小于?= \ S)\ S + $ /克

     

正面观察(?&lt; = \ s)

     

断言下面的正则表达式匹配

     

\ s匹配任何空白字符(等于[\ r \ n \ t \ f \ v])

     

\ S +匹配任何非空格字符(等于[^ \ r \ n \ t \ f \ f])

     
      
  • 量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
  •   
     

$在字符串末尾或行之前断言位置   字符串末尾的终结符(如果有的话)

答案 1 :(得分:0)

只需改变你的模式:

refreshUser (): Promise<User> {
  return repository.getUserById(this.currentUser.id)
    .then(user => {
      this.currentUser = user;
      return user;
    })
  ;
}
  • let pattern = "\\w+$" 匹配任何字词,即\w
  • [A-Za-z0-9]表示一个或多个

答案 2 :(得分:0)

我认为这是因为* regex operator

  

匹配0次或更多次。尽可能多地匹配。

这可能会导致它同时将<末尾没有字符'加上与最后的字匹配,从而导致两次替换。

如@Code所述,如果你使用let pattern = "\\w+$",它只会在有字符的情况下匹配,从而消除'无字符'匹配。

"Word1 Word2"
        ^some characters and then end
            ^0 characters and then end