如何在JavaScript中通过REGEX匹配Salesforce字段?

vwoqyblh  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(135)

考虑下面的多行字符串:

CreatedDate
Account.Example_1__c
Account.LastModifiedDate
Test__r.Example_2__c
Test__r.OwnerId
Test__r.Owner.Name
Test__r.Owner.Custom__c
Test__r.Owner.Custom__r.Id

$Action.Account.New
$ObjectType.Account
$Api.Session_ID
$Label.firstrun_helptext
.
...

如何在JavaScript中使用REGEX匹配Salesforce字段并跳过全局变量(以"$"开头)?
REGEX应仅匹配以下内容:

CreatedDate
Account.Example_1__c
Account.LastModifiedDate
Test__r.Example_2__c
Test__r.OwnerId
Test__r.Owner.Name
Test__r.Owner.Custom__c
Test__r.Owner.Custom__r.Id

/[\w.]+/g与Salesforce字段匹配,但结果中还包括单点和全局变量。
匹配项中不应包括......等或全局变量。

    • 其他示例:**
    • 1)**注意,这可以是单行或多行字符串,并且字段可以出现在同一行上的其他数据之前和/或之后:

例如:

Test__r.Example_1__c >>>> (Test__r.Example_2__c) <<<< $Action.Account.New >>>> ... Test__r.Example_3__c

...应匹配:

Test__r.Example_1__c
Test__r.Example_2__c
Test__r.Example_3__c
    • 2)**这些字段用于公式(如Excel公式),因此:
Example_1__c/Example_2__c*Example_3__c-Example_4__c+Example_5__c<>Example_6__c!=Example_7__c,Example_8__c

...应返回:

Example_1__c
Example_2__c
Example_3__c
Example_4__c
Example_5__c
Example_6__c
Example_7__c
Example_8__c
7cwmlq89

7cwmlq891#

这个怎么样?

(?<!$)(?<=^|\n|\s|\()\w+[\w\.]*

我们确保该部分不以"$"开头,然后将开头标记为字符串的开头、换行符或空格之后的任何内容,或者作为特殊情况标记为左括号之后的任何内容,然后匹配不以"."开头的任何单词,然后允许点。
Try it.

tcbh2hod

tcbh2hod2#

匹配$+单词/点字符以跳过这些匹配项,并使用单词/点模式匹配和捕获其余字符:

/\$[\w.]+|(\w+(?:\.\w+)*)/g

请参见regex demo。* 详细信息 *:

  • \$[\w.]+-$,然后是一个或多个字/点字符
  • |-或
  • (\w+(?:\.\w+)*)-第1组:一个或多个字字符,然后是点的零个或多个序列,然后是一个或多个字字符。

参见JS演示:

const text = 'Test__r.Example_1__c >>>> (Test__r.Example_2__c) <<<< $Action.Account.New >>>> ... Test__r.Example_3__c';
const rx = /\$[\w.]+|(\w+(?:\.\w+)*)/g;
const matches = Array.from([...text.matchAll(rx)], (x) => x[1]).filter(Boolean);
console.log(matches);

.filter(Boolean)从结果中删除undefined值,这些值是由于当前的模式逻辑(排除匹配项而不捕获)而出现的。

相关问题