我用regexp包来代替波纹文本
{% macro products_list(products) %}
{% for product in products %}
productsList
{% endfor %}
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
但我不能代替"产品"不替换像"products_list"另一个词和Golang没有像FUNC re.ReplaceAllStringSubmatch做子匹配代替(但只是FindAllStringSubmatch).我用re.ReplaceAllString替换了"产品".
{% macro ._list(.) %}
{% for product in . %}
.List
{% endfor %}
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
这不是我想要的,我需要以下结果:
{% macro products_list (.) %}
{% for product in . %}
productsList
{% endfor %}
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
Wik*_*żew 56
您可以使用具有匹配字符串边界或不匹配字符_(仍使用单词边界)的替换的捕获组:
var re = regexp.MustCompile(`(^|[^_])\bproducts\b([^_]|$)`)
s := re.ReplaceAllString(sample, `$1.$2`)
Run Code Online (Sandbox Code Playgroud)
关于模式的说明:
(^|[^_])- 匹配字符串start(^)或除以外的字符_\bproducts\b - 一句话"产品"([^_]|$)- _字符串的非结尾或结尾.在替换模式中,我们使用反向引用来恢复使用括号(捕获组)捕获的字符.