JavaScript正则表达式背后的正面看法

时间:2010-08-25 18:33:18

标签: javascript regex

我有一份文件,我需要从中提取一些数据。文档包含这些字符串

Text:"How secure is my information?"

我需要在文字Text:

之后提取双引号的文字
How secure is my information?

如何在Javascript

中使用正则表达式执行此操作

8 个答案:

答案 0 :(得分:51)

Lookbehind断言最近已针对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正则表达式中的lookbehind。你必须使用像这样的表达式的捕获括号:

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

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

然而,这并不会涵盖所有外观断言用例。

答案 1 :(得分:20)

我只想添加一些内容:JavaScript 不支持支持(?<= )(?<! )等外观设计。

确实支持(?= )(?! )等前瞻。

答案 2 :(得分:11)

你可以这样做:

/Text:"(.*?)"/

说明:

  • Text:":字面上匹配
  • .*?:匹配任何内容 非贪婪的方式
  • ():捕捉比赛
  • ":匹配文字"
  • / /:分隔符

答案 3 :(得分:2)

string.match(/Text:"([^"]*)"/g)

答案 4 :(得分:2)

<script type="text/javascript">
var str = 'Text:"How secure is my information?"';
var obj = eval('({'+str+'})')
console.log(obj.Text);
</script>

答案 5 :(得分:2)

如果你想完全避免使用正则表达式,你可以这样做:

var texts = file.split('Text:"').slice(1).map(function (text) {
  return text.slice(0, text.lastIndexOf('"')); 
});

答案 6 :(得分:1)

以下是一个展示如何处理此问题的示例。

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)    ));

RUN SNIPPET参加工作演示

&#13;
&#13;
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)    ));
&#13;
&#13;
&#13;

答案 7 :(得分:0)

如果像我一样,在研究与Cloudinary gem有关的bug时来到这里,您会发现这很有用:

Cloudinary最近发布了他们的gem版本1.16.0。在Safari中,这崩溃并显示错误“无效的正则表达式:无效的组说明符名称”。

已提交错误报告。同时,我恢复为 1.15.0 ,错误消失了。

希望这可以为某人节省一生。