使用javascript在cdata字符串中查找特定字符串

使用javascript在cdata字符串中查找特定字符串,javascript,regex,jsctypes,Javascript,Regex,Jsctypes,我已经读了一些关于CData的内容。我有一个特定的用例,其中有一个数字字符串,我正在运行一个正则表达式模式。对于我正在做的事情来说,它已经相当有性能了,但是我有兴趣让它在更大的应用程序中更具性能 我将多维模型表示为一个整数字符串(不一定是整数,但到目前为止这对我很有效)。我用0表示空白空间,用1表示占用空间,每个连续的维度除以一个整数,用2表示二维 3 1D: 3x3 2D: 00020002000 3x3x3 3D: 00020002000300020002000300020002000

我已经读了一些关于CData的内容。我有一个特定的用例,其中有一个数字字符串,我正在运行一个正则表达式模式。对于我正在做的事情来说,它已经相当有性能了,但是我有兴趣让它在更大的应用程序中更具性能

我将多维模型表示为一个整数字符串(不一定是整数,但到目前为止这对我很有效)。我用
0
表示空白空间,用
1
表示占用空间,每个连续的维度除以一个整数,用
2
表示二维

3 1D:

3x3 2D:

00020002000
3x3x3 3D:

00020002000300020002000300020002000
制作正则表达式模式涉及到很多东西,但基本上它在2D中看起来是这样的(这是一个超级简化的版本):

var gridWidth=//网格的总宽度
var columns=//要放置在网格中的对象的宽度
var rows=//要放置在网格中的对象的高度
var网格=00020002000;
//(0{列数})+([0-2]{网格和对象的宽度差})(0{再次列数))。重复(行数)
var reg=RegExp((“(0{columns+”})”+(([0-2]{++(gridWidth+1-columns)+“})(0{columns+”})。重复(rows-1))+”);
grid=grid.replace(reg,function(){
//最后两个参数不属于我们的分组
var l=arguments.length-2;
r=“”;
因为(var i=1;i“更高的绩效”与您试图实现的目标有关


您阅读的CData规范只是一个草稿。同时,请保持简单-尝试数组。正则表达式似乎是一个新颖的想法,但在我看来,它将很难维护。

我已经听过很多次了,但使用数组数据结构并循环它似乎相当单调,除非有更好的方法在数组中搜索我不知道的多个位置。我的方法允许我搜索一次并找到对象的空间,或传递索引以检测冲突,等等。我知道内部可能涉及使用正则表达式搜索字符串的数组,但它似乎已经比js数组性能更高。我将对onc进行更彻底的测试我对它进行了一点改进。还研究了位运算符。
00020002000300020002000300020002000
var gridWidth = //total width of our grid
var columns = //width of our object to place in grid
var rows = //height of our object to place in grid
var grid = 00020002000;

// (0{number of columns})+(([0-2]{difference in width of grid and object})(0{number of columns again)).repeat(number of rows) 
var reg = RegExp(("(0{" + columns + "})" + ("([0-2]{" + (gridWidth + 1 - columns) + "})(0{"+columns+"})").repeat(rows-1)) + "");

grid = grid.replace(reg, function(){
    //the last 2 argument's aren't part of our grouping
    var l = arguments.length - 2;
    r = "";
    for (var i = 1; i<l; ++i){
        if (i%2){
            r+= "1".repeat(columns); //repeat prototyped, just repeats string x times
        } else {
            r+= arguments[i];
        }
    }
    return r;
});