Есть ли способ получить (начальные) позиции символов внутри строки результатов регулярного выражения match () в Javascript?
javascript
regex
match
string-matching
stagas
источник
источник
re
качестве переменной и добавлениеg
модификатора имеют решающее значение! В противном случае вы получите бесконечный цикл.undefined
. jsfiddle.net/6uwn1vof/2, который не похож на ваш пример поиска.g
флаг, и он будет работать. Посколькуmatch
это функция строки, а не регулярное выражение, она не может быть похожей на состояниеexec
, поэтому она обрабатывает ее какexec
(т.е. имеет свойство index), если вы не ищете глобального соответствия ... потому что тогда состояние не имеет значения ,Вот что я придумал:
источник
match.index + match[0].length
также работает для конечной позиции.match.index + match[0].length - 1
?.slice()
и.substring()
. Инклюзивный конец будет на 1 меньше, как вы говорите. (Будьте осторожны, инклюзивный обычно означает индекс последнего символа в матче, если только это не пустое совпадение, где он равен 1 перед матчем и может находиться-1
вне строки целиком для пустого совпадения в начале ...)Из документации developer.mozilla.org о
.match()
методе String :При работе с неглобальным регулярным выражением (т. Е. Без
g
флага на вашем регулярном выражении) возвращаемое значение.match()
имеетindex
свойство ... все, что вам нужно сделать - это получить к нему доступ.Вот пример, показывающий, как это работает:
Я успешно проверил это вплоть до IE5.
источник
Вы можете использовать
search
методString
объекта. Это будет работать только для первого матча, но в противном случае будет делать то, что вы описываете. Например:источник
Вот интересная особенность, которую я обнаружил недавно, я попробовал это на консоли, и она, кажется, работает:
Что вернуло: "граница 6, нижний 13, левый 18 радиус"
Так что это, кажется, то, что вы ищете.
источник
arguments
которая является позицией. Не «второй аргумент». Аргументы функции: «полное совпадение, group1, group2, ...., индекс совпадения, сопоставление полной строки»В современных браузерах вы можете сделать это с помощью string.matchAll () .
Преимущество этого подхода по сравнению с тем
RegExp.exec()
, что он не основан на регулярном выражении, как в ответе @ Gumbo .источник
Этот член fn возвращает массив позиций на основе 0, если таковые имеются, входного слова внутри объекта String
Сейчас попробуй
Вы также можете ввести регулярные выражения:
Здесь можно получить индекс положения линейного члена.
источник
источник
str.indexOf
здесь просто находит следующее вхождение текста, захваченного совпадением, которое не обязательно совпадает. JS регулярное выражение поддерживает условия для текста за пределами захвата с предвидением. НапримерsearchIndex("foobarfoobaz", "foo(?=baz)", true)
должен дать[6]
, а не[0]
.или
источник