Ответ 1
Попробуйте что-то вроде:
var regexp = /abc/g;
var foo = "abc1, abc2, abc3, zxy, abc4";
var match, matches = [];
while ((match = regexp.exec(foo)) != null) {
matches.push(match.index);
}
console.log(matches);
Здравствуйте, я использую метод indexOf для поиска, если строка присутствует внутри другой строки. Но я хочу получить все места, где находится строка? Есть ли какой-либо метод для получения всех мест, где существует строка?
<html>
<head>
<script type="text/javascript">
function clik()
{
var x='hit';
//document.getElementById('hideme').value ='';
document.getElementById('hideme').value += x;
alert(document.getElementById('hideme').value);
}
function getIndex()
{
var z =document.getElementById('hideme').value;
alert(z.indexOf('hit'));
}
</script>
</head>
<body>
<input type='hidden' id='hideme' value=""/>
<input type='button' id='butt1' value="click click" onClick="clik()"/>
<input type='button' id='butt2' value="clck clck" onClick="getIndex()"/>
</body>
</html>
Есть ли способ получить все позиции?
Попробуйте что-то вроде:
var regexp = /abc/g;
var foo = "abc1, abc2, abc3, zxy, abc4";
var match, matches = [];
while ((match = regexp.exec(foo)) != null) {
matches.push(match.index);
}
console.log(matches);
Вот рабочая функция:
function allIndexOf(str, toSearch) {
var indices = [];
for(var pos = str.indexOf(toSearch); pos !== -1; pos = str.indexOf(toSearch, pos + 1)) {
indices.push(pos);
}
return indices;
}
Пример использования:
> allIndexOf('dsf dsf kfvkjvcxk dsf', 'dsf');
[0, 4, 18]
Я не знаю, есть ли встроенная функция для этого. Вы могли бы сделать это в простой схеме:
function allIndexes(lookIn, lookFor) {
var indices = new Array();
var index = 0;
var i = 0;
while(index = lookIn.indexOf(lookFor, index) > 0) {
indices[i] = index;
i++;
}
return indices;
}
Вы можете использовать indexOf ('searchstring',), используя индекс, возвращаемый 'last time round' + 1, пока вы не получите -1 назад.
Здесь используется регулярное выражение:
function positions(str, text) {
var pos = [], regex = new RegExp("(.*?)" + str, "g"), prev = 0;
text.replace(regex, function(_, s) {
var p = s.length + prev;
pos.push(p);
prev = p + str.length;
});
return pos;
}