【问题标题】:Using regex to obtain terminator int in for-loop使用正则表达式在for循环中获取终止符int
【发布时间】:2014-04-12 04:35:58
【问题描述】:

我搜索了很多,但无法检测到我的变量中的 for 循环;

我有一个类似的字符串:"for(i=0;i<=1000;i++)" 或者它可能是任何类型的 for 循环!

我想得到for loop 的第一部分:比如for(i=0;1000,如果给出数字,它会运行多少次。

我现在使用的是第一部分,但它并不完美:

 str.replace(/for\(\w+=\w;/g,"something");

当我在两者之间放置一些空间时它会失败!

有什么方法可以只获取for循环的一部分使用regEx??

【问题讨论】:

  • 为 Javascript 指定 For 循环语句 here
  • @P̲̳x͓L̳,我知道什么是 for 循环,但我想通过使用 regEX 来检测它,因为我创建了一个实时编辑器,所以检查用户代码很重要,它对我的应用程序?所以我只想使用 regEX 检测 for 循环。
  • 出于好奇:你为什么要这个?你用 JavaScript 解析 JavaScript 做什么?
  • 实际上我创建了一个实时编辑器,所以如果我运行大循环,它会挂起我的应用程序,所以我必须检测循环是否很长,提醒用户它是有害的。退房:stackoverflow.com/questions/21852811/…@Phrogz
  • @AshishMishra 如果编辑器不需要与 DOM 交互——如果用户正在编写不与 HTML 页面交互的 JavaScript——那么using a web worker 可能会更好地为您服务,这样您就可以杀死任何长时间运行的代码。您在这里所拥有的内容适用于可以编写的会出现问题的非常非常小的代码子集。无限 while 循环、不递增的 for 循环、递归不良等。

标签: regex


【解决方案1】:

这行得通:

\bfor\s*\([^;]+;.+\b(\d+)\b\s*;

Debuggex Demo

这允许在 for 和 open-paren 之间以及在捕获组 1 中的数字(您想要的数字)和以下分号之间使用空格。

就你如何“获得”你想要的数字而言:它在捕获组 1 中。我不知道您使用的是什么语言,但在 Java 中,您可以通过以下方式检索它:

Matcher m = Pattern.
   compile("\\bfor\\s*\\([^;]+;.+\\b(\\d+)\\b\\s*;").
   matcher(theSourceCode);

int theNumberYouWant = -1;
if(m.find())  {
   //Safe to translate to int, since the match guarantees it's a number
   theNumberYouWant = Integer.parseInt(m.group(1));
}

如果您还需要捕获第一个数字,在 first 分号之前,只需复制当前捕获组。所以改变这个

\bfor\s*\([^;]+;.+\b(\d+)\b\s*;

\bfor\s*\(.+\b(\d+)\b\s*;.+\b(\d+)\b\s*;

现在第一个数字在捕获组 1 中,然后在捕获组 2 中第二个。

【讨论】:

  • 感谢@aliteralmind 的回答,但我如何得到号码?那是i<=1000
  • 当我在for 之后给空间时它不起作用,例如:for (i=0;i<=1000;i++)
  • 更新了我对“我如何得到它?”的回答。问题。
  • 不客气。乐意效劳。并感谢您的投票和接受!
  • 考虑使用 Debuggex 等在线工具,我也强烈推荐 Windows 应用 RegexBuddy (regexbuddy.com)。这是一个关于更多信息的好问题:stackoverflow.com/questions/4736/learning-regular-expressions。祝你好运!
猜你喜欢
  • 2023-02-21
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 2021-12-24
  • 2021-05-15
  • 1970-01-01
相关资源
最近更新 更多