mirror of
https://github.com/n8n-io/n8n.git
synced 2025-02-21 02:56:40 -08:00
fix(Switch Node): Fix issue preventing some regex patterns from working (#8422)
This commit is contained in:
parent
7660d7e735
commit
e9fea16301
|
@ -0,0 +1,371 @@
|
|||
{
|
||||
"name": "Switch Regex Test",
|
||||
"nodes": [
|
||||
{
|
||||
"parameters": {},
|
||||
"id": "1301e15e-7a64-44bf-bc4b-d60e7b8c629a",
|
||||
"name": "When clicking \"Test workflow\"",
|
||||
"type": "n8n-nodes-base.manualTrigger",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
780,
|
||||
600
|
||||
]
|
||||
},
|
||||
{
|
||||
"parameters": {},
|
||||
"id": "be9a3cd8-7c19-493c-aacf-a52aba064324",
|
||||
"name": "Fallback",
|
||||
"type": "n8n-nodes-base.noOp",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
1680,
|
||||
900
|
||||
]
|
||||
},
|
||||
{
|
||||
"parameters": {},
|
||||
"id": "f7de5522-5750-4102-9b3b-0a01f7bbf6cc",
|
||||
"name": "Output",
|
||||
"type": "n8n-nodes-base.noOp",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
1640,
|
||||
320
|
||||
]
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"fields": {
|
||||
"values": [
|
||||
{
|
||||
"name": "test",
|
||||
"stringValue": "value"
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {}
|
||||
},
|
||||
"id": "55af4400-ed88-4ee2-b654-3a82bd112875",
|
||||
"name": "Edit Fields",
|
||||
"type": "n8n-nodes-base.set",
|
||||
"typeVersion": 3.2,
|
||||
"position": [
|
||||
1020,
|
||||
600
|
||||
]
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"rules": {
|
||||
"values": [
|
||||
{
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict"
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "17eb6574-9578-4915-8365-772e08d2f06b",
|
||||
"leftValue": "={{ $json.test }}",
|
||||
"rightValue": "/^value$/g",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "notRegex"
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"fallbackOutput": "extra"
|
||||
}
|
||||
},
|
||||
"id": "06657954-6bcb-4d60-a659-5d3e5e3d093d",
|
||||
"name": "NotMatch",
|
||||
"type": "n8n-nodes-base.switch",
|
||||
"typeVersion": 3,
|
||||
"position": [
|
||||
1320,
|
||||
720
|
||||
],
|
||||
"alwaysOutputData": false
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"rules": {
|
||||
"values": [
|
||||
{
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict"
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "17eb6574-9578-4915-8365-772e08d2f06b",
|
||||
"leftValue": "={{ $json.test }}",
|
||||
"rightValue": "/^value$/g",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "regex"
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"fallbackOutput": "extra"
|
||||
}
|
||||
},
|
||||
"id": "07776b86-1d7c-4435-b7d8-da73a01830cf",
|
||||
"name": "Match",
|
||||
"type": "n8n-nodes-base.switch",
|
||||
"typeVersion": 3,
|
||||
"position": [
|
||||
1320,
|
||||
340
|
||||
],
|
||||
"alwaysOutputData": false
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"rules": {
|
||||
"values": [
|
||||
{
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict"
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "17eb6574-9578-4915-8365-772e08d2f06b",
|
||||
"leftValue": "={{ $json.test }}",
|
||||
"rightValue": "^value$",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "regex"
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"fallbackOutput": "extra"
|
||||
}
|
||||
},
|
||||
"id": "9fb71a7e-23aa-44f6-ae75-cfc4dc045b81",
|
||||
"name": "Match1",
|
||||
"type": "n8n-nodes-base.switch",
|
||||
"typeVersion": 3,
|
||||
"position": [
|
||||
1320,
|
||||
500
|
||||
],
|
||||
"alwaysOutputData": false
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"rules": {
|
||||
"values": [
|
||||
{
|
||||
"conditions": {
|
||||
"options": {
|
||||
"caseSensitive": true,
|
||||
"leftValue": "",
|
||||
"typeValidation": "strict"
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"id": "17eb6574-9578-4915-8365-772e08d2f06b",
|
||||
"leftValue": "={{ $json.test }}",
|
||||
"rightValue": "^value$",
|
||||
"operator": {
|
||||
"type": "string",
|
||||
"operation": "notRegex"
|
||||
}
|
||||
}
|
||||
],
|
||||
"combinator": "and"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"fallbackOutput": "extra"
|
||||
}
|
||||
},
|
||||
"id": "555125fe-6509-4b68-8e3d-bf643f9b4d09",
|
||||
"name": "NotMatch1",
|
||||
"type": "n8n-nodes-base.switch",
|
||||
"typeVersion": 3,
|
||||
"position": [
|
||||
1320,
|
||||
880
|
||||
],
|
||||
"alwaysOutputData": false
|
||||
},
|
||||
{
|
||||
"parameters": {},
|
||||
"id": "a8d5d282-cff3-4bbf-8293-67b1bbb08e2f",
|
||||
"name": "Output1",
|
||||
"type": "n8n-nodes-base.noOp",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
1640,
|
||||
480
|
||||
]
|
||||
},
|
||||
{
|
||||
"parameters": {},
|
||||
"id": "3b7cf77e-f435-4863-a63d-db716cd27528",
|
||||
"name": "Fallback1",
|
||||
"type": "n8n-nodes-base.noOp",
|
||||
"typeVersion": 1,
|
||||
"position": [
|
||||
1680,
|
||||
740
|
||||
]
|
||||
}
|
||||
],
|
||||
"pinData": {
|
||||
"Output": [
|
||||
{
|
||||
"json": {
|
||||
"test": "value"
|
||||
}
|
||||
}
|
||||
],
|
||||
"Fallback": [
|
||||
{
|
||||
"json": {
|
||||
"test": "value"
|
||||
}
|
||||
}
|
||||
],
|
||||
"Output1": [
|
||||
{
|
||||
"json": {
|
||||
"test": "value"
|
||||
}
|
||||
}
|
||||
],
|
||||
"Fallback1": [
|
||||
{
|
||||
"json": {
|
||||
"test": "value"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"connections": {
|
||||
"When clicking \"Test workflow\"": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Edit Fields",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Edit Fields": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Match",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"node": "NotMatch",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"node": "Match1",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"node": "NotMatch1",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"NotMatch": {
|
||||
"main": [
|
||||
[],
|
||||
[
|
||||
{
|
||||
"node": "Fallback1",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Match": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Output",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"NotMatch1": {
|
||||
"main": [
|
||||
[],
|
||||
[
|
||||
{
|
||||
"node": "Fallback",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"Match1": {
|
||||
"main": [
|
||||
[
|
||||
{
|
||||
"node": "Output1",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"active": false,
|
||||
"settings": {
|
||||
"executionOrder": "v1"
|
||||
},
|
||||
"versionId": "1fdad78e-d569-48c8-bbb9-640e8889b8e3",
|
||||
"meta": {
|
||||
"templateCredsSetupCompleted": true,
|
||||
"instanceId": "8c8c5237b8e37b006a7adce87f4369350c58e41f3ca9de16196d3197f69eabcd"
|
||||
},
|
||||
"id": "EbLiIKvBYzJvLtX3",
|
||||
"tags": []
|
||||
}
|
|
@ -125,6 +125,19 @@ function parseFilterConditionValues(
|
|||
return { ok: true, result: { left: parsedLeftValue.newValue, right: parsedRightValue.newValue } };
|
||||
}
|
||||
|
||||
function parseRegexPattern(pattern: string): RegExp {
|
||||
const regexMatch = (pattern || '').match(new RegExp('^/(.*?)/([gimusy]*)$'));
|
||||
let regex: RegExp;
|
||||
|
||||
if (!regexMatch) {
|
||||
regex = new RegExp((pattern || '').toString());
|
||||
} else {
|
||||
regex = new RegExp(regexMatch[1], regexMatch[2]);
|
||||
}
|
||||
|
||||
return regex;
|
||||
}
|
||||
|
||||
export function executeFilterCondition(
|
||||
condition: FilterConditionValue,
|
||||
filterOptions: FilterOptionsValue,
|
||||
|
@ -183,9 +196,9 @@ export function executeFilterCondition(
|
|||
case 'notEndsWith':
|
||||
return !left.endsWith(right);
|
||||
case 'regex':
|
||||
return new RegExp(right).test(left);
|
||||
return parseRegexPattern(right).test(left);
|
||||
case 'notRegex':
|
||||
return !new RegExp(right).test(left);
|
||||
return !parseRegexPattern(right).test(left);
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
|
@ -431,6 +431,7 @@ describe('FilterParameter', () => {
|
|||
{ left: 'any string', right: '[0-9]', expected: false },
|
||||
{ left: 'any string', right: '[a-z]', expected: true },
|
||||
{ left: 'lowercase', right: '[A-Z]', expected: false },
|
||||
{ left: 'foo', right: '/^fo{2}$/g', expected: true },
|
||||
])('string:regex("$left","$right") === $expected', ({ left, right, expected }) => {
|
||||
const result = executeFilter(
|
||||
filterFactory({
|
||||
|
@ -454,6 +455,7 @@ describe('FilterParameter', () => {
|
|||
{ left: 'any string', right: '[0-9]', expected: true },
|
||||
{ left: 'any string', right: '[a-z]', expected: false },
|
||||
{ left: 'lowercase', right: '[A-Z]', expected: true },
|
||||
{ left: 'foo', right: '/^fo{2}$/g', expected: false },
|
||||
])('string:notRegex("$left","$right") === $expected', ({ left, right, expected }) => {
|
||||
const result = executeFilter(
|
||||
filterFactory({
|
||||
|
|
Loading…
Reference in a new issue