前言
在前端开发中,我们常常需要进行字符串的匹配,比如说验证用户输入的手机号码是否符合规范、过滤某些敏感词汇、提取一段文本中的关键字等等。针对这样的应用场景,我们可以直接使用 JavaScript 内置的字符串方法或 RegExp 正则表达式进行操作。但是,如果要处理的数据量较大或者需求比较复杂,这些方法就显得不太够用了。此时,我们可以借助一些第三方的工具,如 node-red-contrib-match 这个 npm 包。
node-red-contrib-match 是一款在 Node-RED 上运行的 npm 包,它提供了一系列方便易用的节点来对数据进行匹配。在这篇文章中,我们将会介绍这个包的使用方法,并通过实例来说明其实际应用。
安装
在使用 node-red-contrib-match 前,我们需要先在本地安装 Node-RED。具体安装方法可以参考 Node-RED 官网的文档。
然后,我们可以通过 npm 在 Node-RED 上安装 node-red-contrib-match包:
$ cd ~/.node-red $ npm install node-red-contrib-match
安装完成后,在 Node-RED 的节点面板中就会出现一系列与 node-red-contrib-match 相关的节点,如下图所示:
主要功能
node-red-contrib-match 包含了许多有用的节点,这里我们先来介绍一下其中一些常用的节点及其对应功能。
1. match 文本匹配
match 节点是 node-red-contrib-match 中最常用的一个节点,它可以根据用户设置的正则表达式进行文本匹配,并将匹配结果输出。match 节点的基本配置如下:
- Topic:输出结果的消息标题;
- RegEx:用于匹配的正则表达式;
- Flags:正则表达式的修饰符;
- Property:用于提取的匹配内容的属性名;
- Name:输出结果的节点名称。
我们可以通过名为 match-demo
的节点实例来演示如何使用 match 节点:
拖入 match 节点,并在其配置页面中填写以下信息:
- RegEx:
\d+
- Flags:
g
- Property:
payload
- RegEx:
接着,拖入一个 inject 节点,并配置其 payload 为
123abc456def789
。再拖入一个 debug 节点,用于查看匹配结果。
如下图所示:
在这个示例中,我们使用了 g 修饰符来全局匹配字符串中的数字,并通过 Property 属性将匹配结果存在了 payload
中。最后,我们将输出的结果传输到了 debug 节点中,可以看到其输出了匹配到的三个数字。
2. split 分割文本
split 节点可以将一个文本分割成多个子文本,并将每个子文本单独输出。split 节点的基本配置如下:
- Topic:输出结果的消息标题;
- Separator:用于分割的分隔符;
- Property:用于提取的子文本内容属性名;
- Name:输出结果的节点名称。
我们同样可以通过名为 split-demo
的节点实例来演示如何使用 split 节点来分割文本:
拖入该节点,并在其配置页面中填写以下信息:
- Separator:
,
- Separator:
接着,拖入一个 inject 节点,并配置其 payload 为
a,b,c,d
。再拖入一个 debug 节点,用于查看分割结果。
如下图所示:
在这个示例中,我们使用 ,
作为分隔符对字符串进行分割,并通过 Property 属性将每个子文本单独存储在一个数组中,并输出到 debug 节点中。
3. replace 替换文本
replace 节点可以对文本中匹配到的指定内容进行替换,并将替换结果输出。replace 节点的基本配置如下:
- Topic:输出结果的消息标题;
- Search:需要替换的内容;
- Replace:替换成的内容;
- Property:用于存储替换后文本的属性名;
- Name:输出结果的节点名称。
接下来,我们可以通过名为 replace-demo
的节点实例来演示如何使用 replace 节点:
拖入该节点,并在其配置页面中填写以下信息:
- Search:
world
- Replace:
Node-RED
- Property:
payload
- Search:
接着,拖入一个 inject 节点,并配置其 payload 为
Hello, world
.再拖入一个 debug 节点,用于查看替换结果。
如下图所示:
在这个示例中,我们将 Hello, world
中的 world
替换成了 Node-RED
,并将结果存在了 payload
中输出到了 debug 节点中。
总结
node-red-contrib-match 是一款非常实用的 npm 包,它可以方便地对数据进行匹配、分割和替换等操作。本文中,我们介绍了该包中的一些主要节点及其使用方法,并通过实例进行了说明。希望读者们能够掌握这些节点的基本使用,并在实际应用中加以运用。
代码示例:
[{"id":"439a39c7.97e158","type":"inject","z":"cd0c6e91.4ba04","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"123abc456def789","payloadType":"str","x":240,"y":99.60000610351562,"wires":[["f9df27b5.2db2d"]]},{"id":"f9df27b5.2db2d","type":"match","z":"cd0c6e91.4ba04","name":"","rule":"\\d+","topic":"$number","property":"payload","x":452,"y":99.00000762939453,"wires":[["7f8585e5.4abb4"]]},{"id":"7f8585e5.4abb4","type":"debug","z":"cd0c6e91.4ba04","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":612,"y":105.80002021789551,"wires":[]},{"id":"afe70ac9.a6e98","type":"inject","z":"cd0c6e91.4ba04","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"a,b,c,d","payloadType":"str","x":240,"y":179.00003051757812,"wires":[["1af609f2.a9d562"]]},{"id":"1af609f2.a9d562","type":"split","z":"cd0c6e91.4ba04","name":"","splt":",","property":"payload","x":442,"y":176.80001831054688,"wires":[["bdadac62.e4dfe8"]]},{"id":"bdadac62.e4dfe8","type":"debug","z":"cd0c6e91.4ba04","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":602,"y":179.60000610351562,"wires":[]},{"id":"9d3d3b6c.3100f","type":"inject","z":"cd0c6e91.4ba04","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Hello, world","payloadType":"str","x":240,"y":259.4000244140625,"wires":[["dd7a84d48.3705b"]]},{"id":"dd7a84d48.3705b","type":"replace","z":"cd0c6e91.4ba04","name":"","rule":"world","action":"replace","property":"payload","from":"","to":"","reg":false,"x":459.5999755859375,"y":259,"wires":[["b63880a1.6fd998"]]},{"id":"b63880a1.6fd998","type":"debug","z":"cd0c6e91.4ba04","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":628.5999755859375,"y":262.20001220703125,"wires":[]}]
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055caf81e8991b448da149