Эта проблема не всегда связана с политикой исполнения PowerShell. Моя машина настроена как «Неограниченная» для PowerShell x64 и x86, но я все еще получаю это сообщение об ошибке от времени до времени в Visual Studio 2013.
Когда я пытаюсь открыть консоль диспетчера пакетов:
Windows PowerShell успешно обновила вашу политику выполнения, но параметр переопределяется политикой, определенной в более конкретной области. Из-за переопределения ваша оболочка сохранит текущую эффективную политику выполнения Unrestricted. Введите «Get-ExecutionPolicy -List», чтобы просмотреть параметры политики выполнения.
blockquote>Это неверное сообщение об ошибке.
Перезагрузка Visual Studio не всегда разрешает проблему.
Выполнение процесса как администратора никогда не устраняет проблему.
Как и в Declan, последнее обновление плагина диспетчера пакетов исправило проблему: 2.8.60723.765
Вот что я придумал:
// Finds starting and ending positions of quoted text
// in double or single quotes with escape char support like \" \'
var str = "this is a \"quoted\" string as you can 'read'";
var patt = /'((?:\\.|[^'])*)'|"((?:\\.|[^"])*)"/igm;
while (match = patt.exec(str)) {
console.log(match.index + ' ' + patt.lastIndex);
}
Вот замечательная функция, которую я недавно обнаружил, я пробовал это на консоли и, похоже, работал:
var text = "border-bottom-left-radius";
var newText = text.replace(/-/g,function(match, index){
return " " + index + " ";
});
Который вернулся: «border 6 bottom 13 left 18 radius»
Так что это похоже на то, что вы ищете.
arguments
, которая является позицией. Не «второй аргумент». Аргументами функции являются «полное совпадение», «группа1», «группа2», «....», «совпадение», полная строка, сопоставленная с »
– Mike 'Pomax' Kamermans
26 February 2017 в 01:00
Вы можете использовать метод search
объекта String
. Это будет работать только для первого матча, но в противном случае будет делать то, что вы описываете. Например:
"How are you?".search(/are/);
// 4
Этот член fn возвращает массив позиций 0, если они есть, входного слова внутри объекта String
String.prototype.matching_positions = function( _word, _case_sensitive, _whole_words, _multiline )
{
/*besides '_word' param, others are flags (0|1)*/
var _match_pattern = "g"+(_case_sensitive?"i":"")+(_multiline?"m":"") ;
var _bound = _whole_words ? "\\b" : "" ;
var _re = new RegExp( _bound+_word+_bound, _match_pattern );
var _pos = [], _chunk, _index = 0 ;
while( true )
{
_chunk = _re.exec( this ) ;
if ( _chunk == null ) break ;
_pos.push( _chunk['index'] ) ;
_re.lastIndex = _chunk['index']+1 ;
}
return _pos ;
}
Теперь попробуйте
var _sentence = "What do doers want ? What do doers need ?" ;
var _word = "do" ;
console.log( _sentence.matching_positions( _word, 1, 0, 0 ) );
console.log( _sentence.matching_positions( _word, 1, 1, 0 ) );
Вы можете также вводят регулярные выражения:
var _second = "z^2+2z-1" ;
console.log( _second.matching_positions( "[0-9]\z+", 0, 0, 0 ) );
Здесь получается индекс положения линейного члена.
Из developer.mozilla.org docs в методе String .match()
:
Возвращенный массив имеет дополнительное свойство ввода, которое содержит исходную строку, которая был проанализирован. Кроме того, он имеет свойство index, которое представляет нулевой индекс совпадения в строке.
blockquote>При работе с неглобальным регулярным выражением (т. Е. Флаг
g
в вашем регулярном выражении), значение, возвращаемое.match()
, имеет свойствоindex
... все, что вам нужно сделать, это получить к нему доступ.var index = str.match(/regex/).index;
Вот пример, показывающий его работу:
var str = 'my string here'; var index = str.match(/here/).index; alert(index); // <- 10
Я успешно протестировал все это до IE5.
exec
возвращает объект со свойством index
:
var match = /bar/.exec("foobar");
if (match) {
console.log("match found at " + match.index);
}
И для нескольких совпадений:
var re = /bar/g,
str = "foobarfoobar";
while ((match = re.exec(str)) != null) {
console.log("match found at " + match.index);
}
match()
не имеет никакого свойства index
. Результатом является Array
.
– Onur Yıldırım
20 August 2014 в 03:28
re
в качестве переменной и добавление модификатора g
имеют решающее значение! В противном случае вы получите бесконечный цикл.
– oriadam
24 December 2015 в 04:05
g
, и он будет работать. Поскольку функция match
является функцией строки, а не регулярным выражением, она не может быть такой же, как exec
, поэтому она рассматривает ее как exec
(т. Е. Имеет свойство индекса), если вы не ищете глобальное соответствие. .. потому что тогда состояние не имеет значения.
– Jimbo Jonny
29 March 2016 в 22:41
var str = "The rain in SPAIN stays mainly in the plain";
function searchIndex(str, searchValue, isCaseSensitive) {
var modifiers = isCaseSensitive ? 'gi' : 'g';
var regExpValue = new RegExp(searchValue, modifiers);
var matches = [];
var startIndex = 0;
var arr = str.match(regExpValue);
[].forEach.call(arr, function(element) {
startIndex = str.indexOf(element, startIndex);
matches.push(startIndex++);
});
return matches;
}
console.log(searchIndex(str, 'ain', true));
match.index + match[0].length
также работает для конечной позиции. – Beni Cherniavsky-Paskin 6 June 2013 в 07:58match.index + match[0].length - 1
? – David 19 May 2015 в 16:56.slice()
и.substring()
. Инклюзивный конец будет 1 меньше, как вы говорите. (Будьте осторожны, что включительно обычно означает индекс последнего совпадения символа внутри, если только это не пустое совпадение, где оно соответствует 1 до i> и может быть-1
вне строки целиком для пустого совпадения при запуске ...) – Beni Cherniavsky-Paskin 19 May 2015 в 18:06