Положительный взгляд в регулярном выражении JavaScript - PullRequest
30 голосов
/ 25 августа 2010

У меня есть документ, из которого мне нужно извлечь некоторые данные.Документ содержит строки, подобные этим

Text:"How secure is my information?"

Мне нужно извлечь текст в двойных кавычках после литерала Text:

How secure is my information?

Как мне сделать это с помощью регулярных выражений в Javascript

Ответы [ 7 ]

51 голосов
/ 25 августа 2010

Проверки утверждений были недавно доработаны для JavaScript и будут в следующей публикации спецификации ECMA-262. Они поддерживаются в Chrome 66 (Opera 53), но других основных браузеров на момент написания этой статьи не было.

var str = 'Text:"How secure is my information?"',
    reg = /(?<=Text:")[^"]+(?=")/;

str.match(reg)[0];
// -> How secure is my information?

Старые браузеры не поддерживают просмотр в регулярных выражениях JavaScript. Вы должны использовать взятие круглых скобок для таких выражений, как это:

var str = 'Text:"How secure is my information?"',
    reg = /Text:"([^"]+)"/;

str.match(reg)[1];
// -> How secure is my information?

Однако это не охватит все варианты использования утверждений.

20 голосов
/ 11 января 2014

Я просто хочу кое-что добавить: JavaScript не поддерживает вид сзади, например (?<= ) или (?<! ).

Но он поддерживает , например, (?= ) или (?! ).

.
11 голосов
/ 25 августа 2010

Вы можете просто сделать:

/Text:"(.*?)"/

Объяснение:

  • Text:": буквально сопоставляться
  • .*?: сопоставить что-либо вне жадный способ
  • (): для захвата совпадения
  • ": для сопоставления с литералом "
  • / /: разделители
2 голосов
/ 25 ноября 2015

Если вы хотите избежать регулярного выражения все вместе, вы можете сделать:

var texts = file.split('Text:"').slice(1).map(function (text) {
  return text.slice(0, text.lastIndexOf('"')); 
});
2 голосов
/ 25 августа 2010
<script type="text/javascript">
var str = 'Text:"How secure is my information?"';
var obj = eval('({'+str+'})')
console.log(obj.Text);
</script>
2 голосов
/ 25 августа 2010
string.match(/Text:"([^"]*)"/g)
1 голос
/ 20 октября 2016

Вот пример, показывающий, как вы можете подойти к этому.

1) Учитывая эту входную строку:

const inputText = 
`Text:"How secure is my information?"someRandomTextHere
Voice:"Not very much"
Text:"How to improve this?"
Voice:"Don't use '123456' for your password"
Text:"OK just like in the "Hackers" movie."`;

2) Извлекать данные в двойных кавычках после литерала Text:, чтобы результаты представляли собой массив со всеми совпадениями, например:

["How secure is my information?",
 "How to improve this?",
 "OK just like in the \"Hackers\" movie."]

РЕШЕНИЕ

function getText(text) {
  return text
    .match(/Text:".*"/g)
    .map(item => item.match(/^Text:"(.*)"/)[1]);
}

console.log(JSON.stringify(    getText(inputText)    ));

РАБОТАЙТЕ, ЧТОБЫ УВИДЕТЬ РАБОЧИЙ ДЕМО

const inputText = 
`Text:"How secure is my information?"someRandomTextHere
Voice:"Not very much"
Text:"How to improve this?"
Voice:"Don't use '123456' for your password"
Text:"OK just like in the "Hackers" movie."`;



function getText(text) {
  return text
    .match(/Text:".*"/g)
    .map(item => item.match(/^Text:"(.*)"/)[1]);
}

console.log(JSON.stringify(    getText(inputText)    ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...