将JS替换为Golang JS regexp

  • 本文关键字:JS regexp Golang 替换 go
  • 更新时间 :
  • 英文 :


在Javascript中,我有一个单词替换函数,我需要转换为GoLang,但它似乎没有被替换。我相信我在Golang中的正则表达式有问题。

工作JS示例-将街道名称首字母缩写替换为完整的单词。我不能做简单的替换,因为有些单词在字符串的末尾,有些单词在前后有空白,有些在字符串的开始,因此我的regexp不同。

word.replace(/ RD$/, ' ROAD')
.replace(' RD ', ' ROAD ')
.replace(' MKT ', ' MARKET ')
.replace(' NTH ', ' NORTH ')
.replace(/^NTH /, 'NORTH ')
.replace(/ NTH$/, ' NORTH')
.replace(' PK ', ' PARK ')
.replace(/^STH /, 'SOUTH ')
.replace(' STH ', ' SOUTH ')
.replace(' ST ', ' STREET ')

我对GoLang的尝试。

type Address struct {
.....
StreetName string
}
func (address *Address) replace(oldWord string, newWord string) {
sampleRegexp := regexp.MustCompile(oldWord)
result := sampleRegexp.ReplaceAllString(string(address.StreetName), newWord)
fmt.Println(oldWord, newWord, result)
address.StreetName = result
}

然后在我的主。我这样调用它

address.replace(`/ RD$/`, " ROAD")
address.replace(" RD ", " ROAD ")
address.replace(" MKT ", " MARKET ")
address.replace(" NTH ", " NORTH ")
address.replace(`/^NTH /`, "NORTH ")
address.replace(`/ NTH$/`, " NORTH")
address.replace(" PK ", " PARK ")
address.replace(`/^STH /`, "SOUTH ")

例如,如果StreetName是Market Rd,我希望它成为Market Road,但它没有替换。

可能是因为regexp不是string类型吗?

我做了一个简单的操场

为什么不使用零长度字边界b呢?这将锚定匹配在任何单词边界。

那么这只是一个问题:

https://go.dev/play/p/TKs1nIaRZWQ

func expandAbbreviations(s string) string {
return rx.ReplaceAllStringFunc(s, func(m string) string {
r := expansions[strings.ToLower(m)]
if r == "" {
r = m
}
return r
})
}
var rx = regexp.MustCompile(`b(?i:rd|mkt|nth|pk|sth|st)b`)
var expansions = map[string]string{
"rd":  "ROAD",
"mkt": "MARKET",
"nth": "NORTH",
"pk":  "PARK",
"sth": "SOUTH",
"st":  "STREET",
}

转换
Nth 123 Pk St Sth

NORTH 123 PARK STREET SOUTH

最新更新