javascript - 从混合字符串/JSON 数据中提取特定变量
问题描述
我将Tagify与我构建的自定义 AngularJS 指令一起使用,Tagify 混合输入在一个字符串中返回所选标签和文本的 JSON 对象,例如:
var tagify = new Tagify(myElement, {
mode: 'mix',
pattern: /@/,
whitelist: [{ value: "User Name", code: '$name' }, { value: "Phone Number", code: '$phone' }],
enforceWhitelist: true,
dropdown: {
maxItems: 20,
classname: "tags-look",
enabled: 0,
closeOnSelect: true
}
});
tagify.on('change', () => console.log(tagify.DOM.input.value))
用户输入将是:
您好
User Name ×
,短信已发送到您的手机Phone Number ×
。
这个简单的例子返回:
您好
[[{ value: "User Name", code: '$name' }]]
,短信已发送到您的手机[[{ value: "Phone Number", code: '$phone' }]]
。(并且返回的 JSON 被转义)
我稍后要做的是@
用我自己的动态变量替换用户选择的标签(通过输入字符并从下拉列表中选择它们)。
我能够得到一个很好的结果,tagify.DOM.input.textContent
因为它呈现了以下结果:
您好,用户名,短信已发送到您的手机电话号码。
但是,由于whitelist
是可翻译的,并且可以翻译成其他语言,我find and replace
以后不容易,所以我需要的是code
JSON 白名单中的属性,而不是value
. 我找不到方法的预期结果是:
Hello $name, the SMS has been sent to your phone $phone
.
谢谢。
解决方案
您可以创建自定义转换函数,以您喜欢的方式对其进行转换,您可以执行以下操作。
function transformer(value) {
return value.replace(/\[\[(.*?)\]\]/g, (arr => {
let json = JSON.parse(arr);
return json[0].map(e => e.code).join(', ');
}))
}
然后您可以在更改时调用它(或者更确切地说在/提交之前),如下所示:
tagify.on('change', (e) => transformer(e.detail.value));
推荐阅读
- c++ - 从 std::FILE* 创建 GIO GFile 或 GInputStream
- flutter - Flutter多个`MaterialApp`导致冲突
- database - Cassandra DB 结构建议(两表对一)
- powerbi - 我需要在 dax power bi 中操作失败的地方用空格替换 NaN
- microsoft-teams - 在 Teams 聊天中从 Office 365 连接器卡创建 Outlook 事件
- kubernetes-helm - Not able to render the helm template without quotes
- sql - SQL在一列中获取两列记录
- testing - 如何使用 Angular 和 angular.json 配置多个测试套件
- python - TLS 握手未完成
- python - 迷宫递归除法算法