javascript - 具有变量、完全匹配和多个匹配的 Javascript 正则表达式
问题描述
我正在尝试使用特定变量创建正则表达式,该变量与变量完全匹配并替换所有可能出现的情况。我在这里找到了一些不同的答案,但它们似乎不适用于我的问题。
这是我的代码:
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”)
解决方案
您的^
角色告诉正则表达式它应该从字符串的开头匹配,而您的角色告诉正则表达式$
匹配到字符串的结尾。
这意味着您的正则表达式仅适用于类似字符串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)
推荐阅读
- android - 如何使用共享偏好来更新另一个活动的数据?
- python - 通过 char 将字符串拆分为多个列表
- html - 是否可以在他的右侧制作圆形图片和文字?
- excel - Spreadsheet::WriteExcel - 尽管单元格被格式化为文本,但值被更改为科学记数法
- c# - Aspx C# 从 EDMX 生成 .cs 文件
- angular - 关于在垫子上切换按钮的问题
- spring-boot - spring boot 项目中的 .mvn 文件夹是什么意思?
- sql - 如何根据数字检查计算具有真正布尔值的行数
- java - java - 如何在问题类中使用日期选择器时使用Java中的系统当前日期验证用户输入日期
- javascript - 如何在一段时间后重新渲染组件