var s = "This is a {0}, test {{0} {1}.";
本想只匹配红色 {0},而不匹配 {{0},但费了半天劲儿,也没写出来,一查才发现 js 不支持 向后查找!有人提出将字符串和表达式反转后,再应用向前查找。各位高手有啥妙招没?!还有就是 js 为啥不支持向后查找呢?!
本想只匹配红色 {0},而不匹配 {{0},但费了半天劲儿,也没写出来,一查才发现 js 不支持 向后查找!有人提出将字符串和表达式反转后,再应用向前查找。各位高手有啥妙招没?!还有就是 js 为啥不支持向后查找呢?!
解决方案 »
- index.html中调用了99个js 1到99.火狐httpfox抓包看到100个js 1到100 我怎么查看100.js是从从哪个js中引用的?
- 如何将dom对象渲染到Ext的window中
- 火狐 FF firefox【鼠标拖动中弹起时间无法监听】
- 寻找高手说一下google页面中div role=button的js响应代码
- 怎么样批量修改值?
- KindEditor编辑器 异步加载 后如何获得 内容?
- js onload事件
- 救命阿,遇到空前难题!!!
- 为什么多加一个输出语句就出错?
- 我的button按钮的onclick事件调用JS里的方法发生 is not defined 错误
- html转换成word
- |zyciis| javascript如何在子方法中停止父方法的进程
<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);