如何在Node-RED中为航班呼号字符串添加字符间句号适配Google TTS
优化航班呼号TTS发音的Node-RED实现方案
方案1:Function节点一行代码搞定(推荐)
替换你现有流中的3个节点(Function+两个Change)为单个Function节点,代码如下:
// 将任意长度的呼号字符串转为字符间加句号的格式 msg.payload = msg.payload.split('').join('.') + '.'; return msg;
- 原理:
split('')把字符串拆成单个字符的数组,join('.')用句号连接所有字符,末尾加句号保持和你原有输出格式一致(不需要末尾句号可去掉+ '.') - 优势:适配任意长度的呼号,代码极简,易维护
方案2:Change节点的JSONata表达式(无代码实现)
如果不想写JS,直接用单个Change节点完成转换:
- 新增Change节点,添加规则:
Set msg.payload - 规则类型选择
jsonata,输入表达式:
$join($split(payload, ""), ".") & "."
- 原理:JSONata的
$split拆分字符,$join用句号拼接,末尾追加句号 - 优势:纯配置实现,无需编写JavaScript
方案3:正则表达式替换
另一种Function节点的实现方式,用正则匹配每个字符并替换:
msg.payload = msg.payload.replace(/(.)/g, "$1."); return msg;
- 原理:正则
/(.)/g匹配每一个字符,$1指代匹配到的字符,替换为「字符+句号」
替换后的完整流示例(方案1)
[{"id":"da8a6ef0b3c9a5c8","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"ef9f06be11be1595","type":"inject","z":"da8a6ef0b3c9a5c8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"BA2156R","payloadType":"str","x":340,"y":140,"wires":[["a1b2c3d4e5f6"]]},{"id":"777ae9cd4da78bd3","type":"debug","z":"da8a6ef0b3c9a5c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":false,"statusVal":"","statusType":"auto","x":1150,"y":140,"wires":[]},{"id":"a1b2c3d4e5f6","type":"function","z":"da8a6ef0b3c9a5c8","name":"格式化为字符间加句号","func":"msg.payload = msg.payload.split('').join('.') + '.';\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":140,"wires":[["777ae9cd4da78bd3"]]},{"id":"3da6785dbcb2f779","type":"comment","z":"da8a6ef0b3c9a5c8","name":"Splitup a code with .'s","info":"Splitup a code with .'s","x":360,"y":80,"wires":[]}]
内容的提问来源于stack exchange,提问作者LordLinhey
相关产品推荐
相关产品推荐

