var s = "This is a {0}, test {{0} {1}.";
本想只匹配红色 {0},而不匹配 {{0},但费了半天劲儿,也没写出来,一查才发现 js 不支持 向后查找!有人提出将字符串和表达式反转后,再应用向前查找。各位高手有啥妙招没?!还有就是 js 为啥不支持向后查找呢?!
本想只匹配红色 {0},而不匹配 {{0},但费了半天劲儿,也没写出来,一查才发现 js 不支持 向后查找!有人提出将字符串和表达式反转后,再应用向前查找。各位高手有啥妙招没?!还有就是 js 为啥不支持向后查找呢?!
<script type="text/javascript">
<!--
var s = "This is a {0}, test {{0} {1}.";
var reg = /\s(?=\{0\})\{0\}/
alert(s.match(reg))
//-->
</script>
var s = "This is a{0}, test {{0} {1}."; // 这种情况就是 null
那也起码得有个参照物吧?<script type="text/javascript">
<!--
var s = "This is a {0}, test {{0} {1}.";
var reg = /[^{](?=\{0\})\{0\}/; //这样也不能算特例其实,,
alert(s.match(reg))
//-->
</script>
但是匹配占位符时遇到了麻烦!
这就直接导致需要应用 负向后查找 时滴困境?!其实如果 js 支持 负向后查找 滴话,
var reg = /(?<!{)\{0}/g;
就是最佳答案,可惜 js 不支持!
当需要显示 { 时就表示为 {{ (.NET 中 String.Format 就是这么处理滴),
x{0},只要 x 不是 {,就要把 {0} 提取出来。var reg = /(?<!{)\{0}/g;
可惜 js 中不能用!
http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript一种介绍了三种方法,第一种方法应该就能解决俺滴问题,稍后贴出来;
第三种方法据说很强大,还没看懂,哈
//Try it.
var s = "This is a {0}, test {{0} {1}.";
var arr=['[Replace 1]','[replace 2]','[replace 3]' ];
var regex=/(\{+)(\d+)(\}+)/g;
var _index='';
var result= s.replace(regex,function(){
if(arguments[1].length!=1||arguments[3].length!=1) return arguments[0];
_index=arguments[2]-0;
if(_index<arr.length&&_index>=0)return arr[_index];
});
alert(result);
/*
* summary: 将指定的 String 中的每个格式(例如:{0}, {1}等)项替换为相应对象的值的文本等效项。
* 需显示左大括号时,应输入双左大括号,即 "{{" 。
*
* parameter:
* fmtStr@string: 包含零个或多个格式项。
* paramsArray@paramsObject[]: 包含零个或多个要格式化的对象的 Object 数组。
*
* return: fmtStr 的一个副本,其中格式项已替换为 paramsArray 中相应 Object 实例的 String 等效项。
*
* example: document.write(String.format("hello, {0}, {1}!<br />keey {{{{2}}", "world", 123));
*/
String.format = function(fmtStr, paramsArray) {
var output = fmtStr;
var re;
var valueArray; if (paramsArray instanceof Array)
valueArray = paramsArray
else
{
valueArray = new Array();
for (var i=1; i<arguments.length; i++)
valueArray.push(arguments[i]);
} for (var i=0; i<valueArray.length; i++)
{
re = new RegExp("(\\{)?\\{"+i+"}", "g");
output = output.replace(re, function($0, $1){
return $1 ? $0 : valueArray[i];
});
} return output.replace(new RegExp("\\{\\{", "g"), "{");
};document.write(String.format("hello, {0}, {1}!<br />keey {{{{2}}", "world", 123));
//参考提供的网址修改一下
var s = "This is a {0}, test {{0} {1}.";
var arr=['[Replace 1]','[replace 2]','[replace 3]' ];
//var regex=/(\{+)(\d+)(\}+)/g;
var regex=/(\{+)?{(\d+)}(?!\}+)?/g;
var _index='';
var result= s.replace(regex,function(){
if(arguments[1]) return arguments[0];
_index=arguments[2]-0;
if(_index<arr.length&&_index>=0)return arr[_index];
});
/*
var result= s.replace(regex,function(){
if(arguments[1].length!=1||arguments[3].length!=1) return arguments[0];
_index=arguments[2]-0;
if(_index<arr.length&&_index>=0)return arr[_index];
});
*/
alert(result);