Changing text based on the final letter of user name using regular expression

后端 未结 2 1802

I am looking to change the ending of the user name based on the use case (in the language system will operate, names ends depending on how it is used).

So need to defin

2条回答
  •  走了就别回头了
    2021-01-21 06:01

    @Sundeep makes an important observation in a comment on the question. If, for example, the substitutions were give by the following hash:

    g = {'e'=>'ai', 's'=>'es', 'us'=>'mi', 'i' => 'as'}
      #=> {"e"=>"ai", "s"=>"es", "us"=>"mi", "i"=>"as"}
    

    'surnamus' would be converted (incorrectly) to 'surnamues' merely because 's'=>'es' precedes 'us'=>'mi' in g. That situation may not exist at present, but it may be prudent to allow for it in future, particularly because it is so simple to do so:

    h = g.sort_by { |k,_| -k.size }.to_h
      #=> {"us"=>"mi", "e"=>"ai", "s"=>"es", "i"=>"as"}
    
    arr = ['surname', 'surnamus', 'surnami', 'surnamo']
    

    The substitutions can be done using the form of String@#sub that employs a hash as its second argument.

    r = /#{Regexp.union(h.keys)}\z/
      #=> /(?-mix:us|e|s|i)\z/i
    arr.map { |s| s.sub(r,h) }
      #=> ["surnamai", "surnammi", "surnamas", "surnamo"]
    

    See also Regexp::union.

    Incidentally, though key-insertion order has been guaranteed for hashes since Ruby v1.9, there is a continuing debate as to whether that property should be made use of in Ruby code, mainly because there was no concept of key order when hashes were first used in computer programs. This answer provides a good example of the benefit of exploiting key order.

提交回复
热议问题