我有一份文件,我需要从中提取一些数据。文档包含这些字符串
Text:"How secure is my information?"
我需要在文字Text:
How secure is my information?
如何在Javascript
中使用正则表达式执行此操作答案 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参加工作演示
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;
答案 7 :(得分:0)
如果像我一样,在研究与Cloudinary gem有关的bug时来到这里,您会发现这很有用:
Cloudinary最近发布了他们的gem版本1.16.0。在Safari中,这崩溃并显示错误“无效的正则表达式:无效的组说明符名称”。
已提交错误报告。同时,我恢复为 1.15.0 ,错误消失了。
希望这可以为某人节省一生。