Ok peeps .. Так что у меня есть строковая переменная, которая содержит outerHTML
элемента таблицы. Это не моя удобная, работа и это грязного, есть белое пространство везде, ненужные строки-брейки и любит ...Есть ли способ получить «индекс» поиска RegExp, а не «lastIndex»?
Я собирался попытаться написать некоторые JS для xify или «привести в порядок» код, табулировать строки, удалять пробелы и т. д., когда я решил в конце концов взять гангер на то, как RegExp работал в поиске строки ...
Я в процессе понимания как работает RegExp.lastIndex
и как часть визуального обучения мне хотелось отобразить строку, которую я искал в консоли e с цветным стилем вокруг выражения в месте нахождения результатов поиска ...
И вот моя проблема. Если я хочу охватить выражение (ы), которое искал с помощью %c
, чтобы его стиль, мне нужен как начальный, так и конечный индекс (lastIndex) выражения ...
Теперь я могу справиться с этим, если выражение такое слово, как /hello/
, я просто вычитаю длину свойства .source
. Но что, если выражения /\w/
, указывающие на что-либо, что является словом.
Q. Как я могу найти индекс начала слова (ов)?
Ниже приведен пример пример того, чего я пытаюсь достичь. На данный момент вызов str.src(exp_3)
не выполняет никаких действий, но ниже приведен пример console.warn()
, который показывает, какого результата я хочу достичь от указанного вызова.
Object.defineProperty(String.prototype,'src',{value:function(e){
src = e.source;
if(src[0] != '\\') len = src.length;
else if(src == '\\s') len = 1;
else len = 0;
aEd = [];
aSty = [];
prev = 0;
while(e.test(this)){
f = e.lastIndex;
s = f-len;
if(s) aEd.push(this.slice(prev, s));
aEd.push('%c', this.slice(s,f), '%c');
aSty.push('background:teal;color:silver', '');
prev = f;
}
aEd.push(this.slice(f,this.length));
sEd = aEd.join('');
sx = '"'+ sEd +'","'+ aSty.join('","') +'"';
eval('console.log('+sx+')');
}});
$(document).ready(function(){
str = 'Is this all this is?';
exp_1 = /is/gi;
exp_2 = /\s/g;
exp_3 = /\w/g;
str.src(exp_1);
str.src(exp_2);
str.src(exp_3);
console.warn(
'%cIs%c %cthis%c %call%c %cthis%c %cis?%c',
'background:teal;color:silver','',
'background:teal;color:silver','',
'background:teal;color:silver','',
'background:teal;color:silver','',
'background:teal;color:silver',''
);
});
Be Kind выглядывает, я говорил, что я обучения ...
Мне сложно понять, какую проблему вы пытаетесь решить с этим. Не могли бы вы упростить проблему? –
, пожалуйста, просто запустите код в консоли хром, я хочу, чтобы «.log()» отображался для вызова 'str.src (exp_3)', чтобы он выглядел так же, как и '.warn()'. 'lastIndex' в цикле даст мне индекс в конце каждого слова, как мне получить индекс в начале каждого слова? конечно, когда выражение найдено 'lastIndex' происходит от чего-то вроде' string.indexOf (..) + expression.source.length', так как я могу получить доступ к 'string.indexOf (..)', если он есть. Извинения, которые я не могу по-настоящему смягчить, поскольку я не знаю, как объяснить это лучше :( – LostInCyberSpace
Есть ли причина, по которой вы захотите это сделать, а не использовать существующий XML-декодер, такой как [vkbeautify] (https : //code.google.com/p/vkbeautify/) –