我正在尝试创建一个具有特定变量的RegExp,该变量与变量完全匹配并替换所有可能出现的情况。我在这里找到了一些不同的答案,但它们似乎不适用于我的问题。
这是我的代码:
for(var translation in translations) {
var regex = new RegExp("^" + translation + "$");
htmlContent = htmlContent.replace(regex, translations[translation][lang]);
}
“翻译”是一个类似于以下内容的JSON:
{
"report_a_return-placeholder": {
"de": "Rücksendung melden",
"en": "Report a return",
"nl": "rapporteer een terugkeer",
"fi": "raportoi palautuksesta",
"da": "rapportere et afkast",
"no": "rapporter en retur",
"sv": "rapportera en avkastning"
}
}
我正在html内替换:
<div id="Report_a_return">
<span>report_a_return-placeholder</span>
</div>
当我尝试在不使用锚的情况下创建正则表达式时,一切正常,并替换了正则表达式。但是,我有一些翻译类似地开始,因此即使不是完全匹配,正则表达式也将其替换。这就是为什么我需要锚点。但是当像上面那样做时,什么也不会被取代!
编辑:
用一个更好的例子来说明。我有例如“ pay-placeholder”和“ cofirm_and_pay-placeholder”都匹配“ confirm_and_pay-placeholder”。但是我希望“ pay-placeholder”仅匹配“ pay-placeholder”,而“ confirm_and_pay-placeholder”仅匹配。那行不通。 (如果我只是使用newRexExp('pay-placeholder'),则它也匹配字符串“ confirm_and_pay-placeholder”)
答案 0 :(得分:1)
您的^
字符告诉正则表达式,它应从字符串的开头开始匹配,而您的$
则告诉匹配到字符串的结尾。
这意味着您的正则表达式仅适用于report_a_return-placeholder
之类的字符串,仅此而已。删除两个字符,一切都会好起来。
我喜欢使用regex.com检查正在发生的事情并获得正则表达式的完整参考。
只要每个标签有一个翻译字符串,这对您就可以使用。
var translations = {'pay_placeholder': 'FooBar'}
var translation = 'pay_placeholder'
var regex = new RegExp('(<\\w+>)(' + translation + ')(<\\/\\w+>)')
var match = '<span>pay_placeholder</span>'.replace(regex, (match, p1, p2, p3, offset, str ) => {
return p1 + translations[p2] + p3
})
var didntMatch = '<span>confirm_and_pay_placeholder</span>'.replace(regex, (match, p1, p2, p3, offset, str ) => {
return p1 + translations[p2] + p3
})
console.log(match, didntMatch)