首页 > 解决方案 > Javascript 正则表达式匹配字符串,仅出现一次 __ 字符

问题描述

我正在努力使用一些正则表达式来匹配我需要的字符串。这是我到目前为止所拥有的,但它比我想要的要匹配:

(\w*__c|\w*__r|[a-zA-Z0-9]*)\.\w*__c|\w*__c

以下是我想要匹配/不匹配的一些示例:

FFX_GLAAssetDisposalID__c                                   => TRUE
FAM__Asset_Sub_Group__r.PNL_On_Asset_Disposal_GL_Account__c => TRUE
Product2.SalesRevenueAccount__c                             => TRUE
ffbext__codabecashmatchingreport                            => FALSE
Product2.c2g__CODASalesRevenueAccount__c                    => FALSE

其中项目由 . 分隔。重要的是 __ 之后的部分中的数量。其中不能超过一组__。我也尝试过负前瞻,但无济于事。

标签: regex

解决方案


你应该记住\w匹配字母、数字下划线。为了能够控制下划线的数量,需要使用[^\W_]字符类,即\w减去下划线。

您可以使用

\b(?:\w+\.)?[^\W_]+(?:_[^\W_]+)*__c\b

查看正则表达式演示

细节

  • \b- 单词边界
  • (?:\w+\.)?- 1+ 字母/数字/下划线的可选序列,然后是.
  • [^\W_]+- 一个或多个字母或数字
  • (?:_[^\W_]+)*- 零个或多个序列,_然后是一个或多个字母/数字
  • __c- 一个__c字符串
  • \b- 单词边界

推荐阅读