Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无景观'^';用jslint_Javascript_Jslint - Fatal编程技术网

Javascript 无景观'^';用jslint

Javascript 无景观'^';用jslint,javascript,jslint,Javascript,Jslint,这是我的代码: /********************************************************** * remove non-standard characters to give a valid html id * **********************************************************/ function htmlid(s) { return s.gsub(/[^A-Z^a-z^0-9^\-^_^:^\.]

这是我的代码:

/********************************************************** * remove non-standard characters to give a valid html id * **********************************************************/ function htmlid(s) { return s.gsub(/[^A-Z^a-z^0-9^\-^_^:^\.]/, "."); } /********************************************************** *删除非标准字符以提供有效的html id* **********************************************************/ 功能htmlid(s){ 返回s.gsub(/[^A-Z^A-Z^0-9^-^:^.]/,”); } 为什么jslint抛出这个错误

Lint at line 5 character 25: Unescaped '^'. return s.gsub(/[^A-Z^a-z^0-9^\-^_^:^\.]/, "."); 第5行的皮棉字符25:未换格“^”。 返回s.gsub(/[^A-Z^A-Z^0-9^-^:^.]/,”);
如果您想要的是一个否定字符类,那么这就是您想要的:

return s.gsub(/[^A-Za-z0-9_:.-]/, ".");

除了对正则表达式的明显更改外,我建议对函数本身进行以下更改:

function htmlid(s) {
  // prevents duplicate IDs by remembering all IDs created (+ a counter)
  var self = arguments.callee;
  if (!self.cache) self.cache = {};

  var id = s.replace(/[^A-Za-z0-9_:.-]/, "."); // note the dash is at the end!
  if (id in self.cache) id += self.cache[id]++;
  self.cache[id] = 0;

  return id;
}

不要投票支持这个…如果你喜欢,请投票支持Tomalak的答案(它与Tomalak的答案相同,但没有使用arguments.callee加上缓存正则表达式本身)


首先,谢谢你的回答。您的操作给函数的语义带来了一点错误,因为如果我两次查询同一字符串,它应该返回相同的id。 例如:

然而,我采纳了你的职能:

var htmlid = (function () {
    var cache = {},
        ncache = {},
        reg = /[^A-Za-z0-9_:.-]/;
    return function (s) {
        var id;
        if (s in cache) {
            id = cache[s];
        } else {
            id = s.replace(reg,".");
            if (id in ncache) {
                id += ncache[id]++;
            }
            ncache[id] = 0;
            cache[s] = id;
        }
        return id;
    };
}());

我喜欢
^ ^
!^ ^(我想知道一个实际上只是
replace()@文森特。没有,点在字符类中没有特殊意义。“但是你必须避开短跑,或者把它放在终点。”托马拉克·乌奇,他不知道+1+1. 我添加了一个答案,消除了争论。如果您想将其复制到您的答案中作为替代解决方案,请这样做,我将删除我的答案。+1用于使用闭包优化我的版本:-)我不想使其变得过于复杂,因为我已经偏离了原始问题,但这当然更有效。
htmlid("foo bar");  // -> "foo.bar"
htmlid("foo bar");  // -> "foo.bar"
htmlid("foo.bar");  // -> "foo.bar0"
htmlid("foo.bar0"); // -> "foo.bar00"
htmlid("foo.bar");  // -> "foo.bar0"
var htmlid = (function () {
    var cache = {},
        ncache = {},
        reg = /[^A-Za-z0-9_:.-]/;
    return function (s) {
        var id;
        if (s in cache) {
            id = cache[s];
        } else {
            id = s.replace(reg,".");
            if (id in ncache) {
                id += ncache[id]++;
            }
            ncache[id] = 0;
            cache[s] = id;
        }
        return id;
    };
}());