使用正则表达式提取最后一个斜杠和最后一个点之间的文本。

3
在JavaScript中,我有这样的字符串:
``` at LoggerService.log (/Users/apps/api/webpack:/pcs-goc-api/pcs-libs/logger/src/logger.service.ts:107:29) ```
我想从中提取`logger.service`。公式是在最后一个`/`和最后一个`.`之间。
我可以使用`/([^\/]+$)/g`从最后一个`/`中提取,但不知道如何将查找限制为最后一个`.`。
注意:以下是其他示例:
``` at LoggerService.log (/Users/apps/api/webpack:/pcs-goc-api/pcs-libs/logger/src/logger.ts:107:29) 期望结果:logger ```
``` at LoggerService.log (/Users/apps/api/webpack:/pcs-goc-api/pcs-libs/logger/src/logger.js:107:29) 期望结果:logger ```
``` at LoggerService.log (/Users/apps/api/webpack:/pcs-goc-api/pcs-libs/logger/src/api.logger.service.ts:107:29) 期望结果:api.logger.service ```

基本但可以解决你所要求的情况 ^.*\/(\w+\.\w+).*$ - Cjmarkham
@Cjmarkham 我通过正则表达式运行了它,它选择了整行。 - Reza
https://regex101.com/r/HlZbFu/1 你需要第一组。 - Cjmarkham
1
好的,既然你修改了内容并展示了更多的例子,我可以说正则表达式现在行不通了。 - Cjmarkham
谢谢@Cjmarkham,我更新了更多的例子,正则表达式只处理两个单词。 - Reza
尝试使用s.match(/\/([^\/\s]*)\.[^\/\s]*$/)[1]。或者,更符合您的规则:s.match(/.*\/(.*)\.[^\/.]*$/)[1]。好吧,甚至/.*\/(.*)\.也可以工作。 - Wiktor Stribiżew
3个回答

2

您可以使用

/.*\/(.*)\./

细节:

  • .* - 除换行符外的任何零个或多个字符,尽可能多地匹配
  • \/ - 一个 / 字符
  • (.*) - 第一组: 除换行符外的任何零个或多个字符,尽可能多地匹配
  • \. - 一个 . 字符。

请参见 JavaScript 演示:

const text = "at LoggerService.log (/Users/apps/api/webpack:/pcs-goc-api/pcs-libs/logger/src/api.logger.service.ts:107:29)";
const match = text.match(/.*\/(.*)\./)
if (match) {
    console.log(match[1]);
}


2
我们可以尝试使用正则表达式替换的方法来处理这里的问题:

var log = "at LoggerService.log (/Users/apps/api/webpack:/pcs-goc-api/pcs-libs/logger/src/api.logger.service.ts:107:29)";
var output = log.replace(/^.*\/|\.[^.]*$/g, "");
console.log(output);

这里的正则表达式模式表示匹配:

  • ^.*\/从开头到最后一个 / 的所有内容,包括最后一个 /
  • | 或者
  • \.[^.]*$ 最后一个小数点到结尾的所有内容

然后,我们用空字符串替换,只留下我们想要的字符串。


1
([^\/]+)[.][^:]+:\d+:\d+

演示:https://regex101.com/r/FeLRmi/1

  • [.] => 匹配 "." 字符
  • [^:] => 匹配除 ":" 以外的任何字符
  • [^:]+ => 匹配一个或多个 [^:]
  • :\d+ => 匹配 ":" 后面的一个或多个数字

所有其他正则表达式语句都是你自己的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接