【问题标题】:Syntax for a regex for numbers prefixed by a particular string [duplicate]以特定字符串为前缀的数字的正则表达式的语法[重复]
【发布时间】:2020-02-03 14:46:21
【问题描述】:

我真的不想在这里问这个问题,因为我确信这会让我被否决,但我真的被困住了。

我使用了多种工具来测试正则表达式,但语法非常混乱。

我的尝试

我将为此使用 javascript,例如,我有以下字符串:

Product ID: 4381 - Fanta Berry cans 355ml x 24

这是来自自动完成下拉菜单的搜索结果,其格式始终为:

Product ID: product_id - Product Name

现在我需要获取 product_id : 和 - 之间的数字

我试过了

/[\d]/g

但这只是选择字符串中的所有数字。

我也试过了:

[(:\b)-]

然后选择 : 和 - 这是我想要获得的数字之间的字符。但我似乎无法弄清楚获取它们之间数字的语法。我觉得我非常接近,但经过数小时的搜索,我似乎无法破解它,我知道这不是人们为你工作的地方,但我向你保证,我已经尝试过并且真的在损失!如果有人能告诉我获得该数字所缺少的一点语法,我将非常感激。

【问题讨论】:

  • 你可以尝试这样^[^:]+:[ \t]*(\d+)使用捕获组regex101.com/r/yNY78Z/1或更精确的^Product ID: (\d+) -
  • str.match(/Product ID: (\d{1,4}) -/)[1]
  • 您有什么特殊原因需要通过解析字符串来获取产品 ID 吗?
  • 您可以将其与/\d+/匹配,即string.match( /\d+/ )[ 0 ]。 (另外,请记住,如果您不使用“global”标志,它只会匹配第一个结果。)
  • PS:这可能是“又一个简单的正则表达式问题”,但您的问题包括努力的迹象(尝试,这让我相信您在询问之前确实花时间在这上面),所以我不看不到投票的理由。我只是不喜欢它,当人们的决策流程图具有从“开始”到“问 SO”的第一个箭头时。在尝试之后帮助那些实际上陷入困境的人正是 SO 的目的。

标签: javascript regex


【解决方案1】:

您可以使用positive lookbehind

(?<=(Product ID: ))(\d*)

请注意,大多数浏览器都支持此方法,but not every

【讨论】:

  • 我不知道为什么在这里使用积极的后视而不是简单的非捕获组。甚至根本没有组。
  • 这运行良好并且支持我们在工作中使用的浏览器 chrome!谢谢。
【解决方案2】:

尝试指定产品 ID 前缀:

/Product ID: (\d+)/g

这里有完整的 JavaScript 代码,以免您感到困惑:

var str = "Product ID: 4381 - Fanta Berry cans 355ml x 24";
var ret = str.match(/Product ID: (\d+)/);
var product_id = ret[1];

console.log(product_id);

【讨论】:

  • 这也很好用,但是我不得不说 Yannick K 的答案是最简单有效的。只有她没有发布答案只是评论。
【解决方案3】:

你可以用/\d+/就好了:

const string = "Product ID: 4381 - Fanta Berry cans 355ml x 24";
const match = string.match( /\d+/ )[0];

console.log( match );

只需确保选择结果数组的第一个元素即可。

另请注意,不使用全局标志将使正则表达式仅匹配第一个结果

【讨论】:

  • 好节目!你传授了我将永远感激的智慧。正则表达式在语法方面是一场噩梦,但就像任何事情一样,它只需要一些练习。再次感谢您!
猜你喜欢
  • 2021-03-18
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多