github.com/wangyougui/gf/v2@v2.6.5/text/gstr/gstr_replace.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/wangyougui/gf.
     6  
     7  package gstr
     8  
     9  import (
    10  	"strings"
    11  
    12  	"github.com/wangyougui/gf/v2/internal/utils"
    13  )
    14  
    15  // Replace returns a copy of the string `origin`
    16  // in which string `search` replaced by `replace` case-sensitively.
    17  func Replace(origin, search, replace string, count ...int) string {
    18  	n := -1
    19  	if len(count) > 0 {
    20  		n = count[0]
    21  	}
    22  	return strings.Replace(origin, search, replace, n)
    23  }
    24  
    25  // ReplaceI returns a copy of the string `origin`
    26  // in which string `search` replaced by `replace` case-insensitively.
    27  func ReplaceI(origin, search, replace string, count ...int) string {
    28  	n := -1
    29  	if len(count) > 0 {
    30  		n = count[0]
    31  	}
    32  	if n == 0 {
    33  		return origin
    34  	}
    35  	var (
    36  		searchLength  = len(search)
    37  		replaceLength = len(replace)
    38  		searchLower   = strings.ToLower(search)
    39  		originLower   string
    40  		pos           int
    41  	)
    42  	for {
    43  		originLower = strings.ToLower(origin)
    44  		if pos = Pos(originLower, searchLower, pos); pos != -1 {
    45  			origin = origin[:pos] + replace + origin[pos+searchLength:]
    46  			pos += replaceLength
    47  			if n--; n == 0 {
    48  				break
    49  			}
    50  		} else {
    51  			break
    52  		}
    53  	}
    54  	return origin
    55  }
    56  
    57  // ReplaceByArray returns a copy of `origin`,
    58  // which is replaced by a slice in order, case-sensitively.
    59  func ReplaceByArray(origin string, array []string) string {
    60  	for i := 0; i < len(array); i += 2 {
    61  		if i+1 >= len(array) {
    62  			break
    63  		}
    64  		origin = Replace(origin, array[i], array[i+1])
    65  	}
    66  	return origin
    67  }
    68  
    69  // ReplaceIByArray returns a copy of `origin`,
    70  // which is replaced by a slice in order, case-insensitively.
    71  func ReplaceIByArray(origin string, array []string) string {
    72  	for i := 0; i < len(array); i += 2 {
    73  		if i+1 >= len(array) {
    74  			break
    75  		}
    76  		origin = ReplaceI(origin, array[i], array[i+1])
    77  	}
    78  	return origin
    79  }
    80  
    81  // ReplaceByMap returns a copy of `origin`,
    82  // which is replaced by a map in unordered way, case-sensitively.
    83  func ReplaceByMap(origin string, replaces map[string]string) string {
    84  	return utils.ReplaceByMap(origin, replaces)
    85  }
    86  
    87  // ReplaceIByMap returns a copy of `origin`,
    88  // which is replaced by a map in unordered way, case-insensitively.
    89  func ReplaceIByMap(origin string, replaces map[string]string) string {
    90  	for k, v := range replaces {
    91  		origin = ReplaceI(origin, k, v)
    92  	}
    93  	return origin
    94  }