修改格式模式以替换字符串中的占位符
Modify formatting-pattern to replace placeholders in string
我目前编写了一个简单的格式化函数来替换字符串中的一些占位符。
var format = function (a, c) {
return a.replace(/{ *([^} ]+) *}/g, function (b, a) {
b = c;
a.replace(/[^.|'[']]+/g, function (a) {
b = b[a];
});
return b;
});
};
语法使用当前的花括号表示法{key}
,我现在尝试修改RegExp
-模式以使用1%而不是%key
。
var pattern = /{ *([^} ]+) *}/g;
我试着用百分比%
替换括号{}
,但这仍然不能正常工作。
var pattern = /% *([^% ]+) */g;
原始模式在预期的以下条件下工作:
var data = {
obj: {
foo: 'Foo',
bar: 'Bar'
},
arr: ['Foo', 'Bar']
};
var objTest = '{obj.foo}, is not equal to {obj.bar}.'
format(objTest, data) // => 'Foo, is not equal to Bar.'
var arrTest = '{arr[0]}, is not equal to {arr[1]}.'
format(arrTest, data) // => 'Foo, is not equal to Bar.'
如果我们使用我修改过的模式,似乎每个占位符替换后的最后一个字符都会被删除:
'%obj.foo, is not equal to %obj.bar.' // => 'undefined is not equal to Bar'
'%arr[0], is not equal to %arr[1]' // => 'undefined is not equal to Bar'
有什么想法吗?如何修改pattern
,使其可以与百分比%
一起使用,而不是与花括号{}
一起使用?
您可以使用以下模式:
var regex = /%([^'b]+)/g;
这意味着后面跟着一个完整字的CCD_ 9符号。这不包括空白字符、下划线等。
如果你想同时使用这些字符,你可以写:
var regex = /%('S+)/g;
相当于:
var regex = /%([^'s]+)/g;
原因是您修改后的正则表达式模式不知道何时停止匹配。在上一个符号中,它终止于下面的}
符号。
这不是一件容易解决的事情,因为有无数的可能性可以用来结束您的格式,在每个替换字符串的末尾都有一个标点符号,即句号%arr[1].
或逗号%obj.foo,
。
因此,为了在您的情况下实现这一点,玩具可以用['.,]
(即)取代原始模式中的}
/% *([^% ]+) *['.,]/g
这是可行的,但现在你的替换模式需要总是用句号或逗号终止,我怀疑这不是你想要的。最好用一个已知字符(如%)终止,这将使您的匹配模式/% *([^% ]+) *%/g
和格式%obj.foo%
,并且您可以通过加倍输出%,即%obj.bar%%%
相关文章:
- 使用javascript的Asp.net内容占位符
- Internet Explorer缺少占位符支持,特别是密码字段
- 如何隐藏按钮单击事件上的占位符
- 需要URL模板占位符查找和替换功能的输入
- 初始化ng模型时,Angular ui选择占位符不起作用
- 如何在ie7或更高版本中设置密码字段的占位符
- 在不使用javascript的情况下,可以在表单字段中设置文本占位符(以提示最终用户插入特定格式)
- Select2-使用自定义模板时不显示占位符
- 替换字符串中的占位符值
- 为什么我应该使用HTML5(上下文:占位符)
- 在contentEditable元素中居中占位符插入符号
- 从气球弹出窗口中删除占位符
- 使用Node/Javascript提取字符串中的所有占位符
- 用来自JSON对象的占位符值替换字符串
- 如何在使用jQuery时为占位符设置onblur和onfocus字符串
- 占位符和标题中的Angularjs html替代字符串
- 修改格式模式以替换字符串中的占位符
- Stringformat占位符,分隔字符串
- 如何知道占位符字符串宽度在px的Jquery/Javascript
- 如果用户选择输入文本,并且输入值是空字符串,我可以保留占位符吗?