JavaScript 正则表达式的正面回顾

IT技术 javascript regex
2021-01-25 10:53:17

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

Text:"How secure is my information?"

我需要提取文字后双引号中的文本 Text:

How secure is my information?

如何在 Javascript 中使用正则表达式执行此操作

6个回答

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 正则表达式中的后视。您必须使用捕获括号来代替这样的表达式:

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

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

然而,这不会涵盖所有的后视断言用例。

但是我如何从一个大文档中提取所有这些数据呢?说成数组什么的?
2021-03-23 10:53:17
嗯。当我测试上面的代码时,我得到了一个 undefined 。当我安慰str.match(reg)没有索引 1 的时候,它会输出["Text:"How secure is my information?""]想法吗?
2021-03-24 10:53:17
凉爽的。作品。为什么g修饰符会杀死捕获括号?我想知道,因为我可以想象一个场景,您可能在一个字符串中有多个目标。str = 'Something <id="12345"> more things <id="qwerty>" ...'如果我想要数组中的所有 id 值,似乎您想使用g但随后捕获括号将消失。这里最好的方式是什么?reg = /id="([^"]+)"/g;-> ["id="12345"","id="qwerty""] -> 然后用/id="([^"]+)"/? 可以在一个正则表达式步骤中完成吗?
2021-04-05 10:53:17
@orangewarp:g我的答案中的示例需要删除修饰符。
2021-04-06 10:53:17
@orangewarp:这是与全局标志匹配的标准行为。它基本上exec在幕后重复调用,在每次迭代中只返回结果数组中的第一个元素。最好的解决方案可能是运行自己的循环,自己调用RegExp.prototype.exec并解析结果,或者使用搜索而不替换的方法(两者或多或少相同,但后者在某些情况下提供了更多便利)。
2021-04-10 10:53:17

我只想补充一点:JavaScript支持像(?<= )(?<! ).

但它确实支持像(?= )or那样的前瞻(?! )

你可以这样做:

/Text:"(.*?)"/

解释:

  • Text:" : 字面上匹配
  • .*? : 以非贪婪的方式匹配任何东西
  • () : 捕捉比赛
  • " : 匹配文字 "
  • / / : 分隔符
那是正则表达式,您应该将它与例如 .match() 一起使用
2021-03-23 10:53:17
你怎么用这个?你有什么背景吗?
2021-04-01 10:53:17
string.match(/Text:"([^"]*)"/g)
string[0] 将始终具有完整的正则表达式匹配。string[1] 将包含捕获的文本。如果正则表达式中有第二个捕获(括号),它将被放入字符串 [2] 等...
2021-03-30 10:53:17
如何避免在结果中匹配 Text: ?
2021-04-10 10:53:17
我认为使用 /g 标志,您只会获得所有匹配项的完整正则表达式匹配。
2021-04-10 10:53:17
g 修饰符将查找页面上匹配的所有内容,而不仅仅是在第一个匹配处停止。你说你有字符串(复数),所以这就是我把 /g 修饰符放在那里的原因。
2021-04-10 10:53:17
<script type="text/javascript">
var str = 'Text:"How secure is my information?"';
var obj = eval('({'+str+'})')
console.log(obj.Text);
</script>
现代浏览器也有JSON.parse,它可能比eval.
2021-03-18 10:53:17