javascript - 如何在本机反应中将包含多个符号的文本拆分为数组?
问题描述
我是本机反应的新手,还不熟悉正则表达式,我想使用正则表达式拆分文本。
我只能使用下面的代码在本机反应中处理一个文本符号:
mapStringToJSX=(text)=>{
let rendering=[]
const nyoba = text.split(/@(.*?)@/g)
nyoba.map((val,index)=>{
//handle split text
})
return(
<Text>
{rendering}
</Text>
)
}
在这里,我可以拆分@
第一个和最后一个文本中包含的任何文本,但符号消失了
例如:
string = "sample text contain @at first and last text@"
output = ["sample text contain ", "at first and last text", ""]
string
我的问题是如果一个包含多个符号并保持符号存在于数组中,我该如何处理?
预期结果:
string = "I @have@ a text #contain# two sy@mbol@ or @#even more#@"
output = ["I ", "@have@", " a text ", "#contain#", " two sy", "@mbol@", " or ", "@#even more#@", ""]
解决方案
由于您已经在使用 Regex,您可以使用字符类和反向引用:
如果您想始终匹配最里面的值,而不接受不成对的嵌套标记
([#@])([^#@]*?)\1
如果您想匹配最外层的匹配项,请使用:
([#@])(.*?)\1
解释第一个(其他只是中间部分的变体):
([#@])
: 匹配 # 或 @ 的组。([^#@]*?)
: 零个或多个不是# 或@ 的字符[^#@]
: 方括号表示“任何一个”,如果第一个字符是^
则表示“没有”- 小组和重复的工作方式与您原来的完全一样
\1
:完全匹配第一个捕获组的内容(所以要么是 # 要么是 @,但最重要的是,如果开头是 @,那么它只会匹配 @,所以在这种情况下foo#bar@lalal
它不会匹配bar
,因为 start 和结束标记不同)
此外,如果您想以更直观的方式测试您的正则表达式,我强烈建议您使用Regex101,它会自动显示匹配项和您编写的正则表达式的完整说明。
推荐阅读
- here-api - 了解 HERE API 中的几何响应
- php - 带有 PHP 实例的 SQL AES_Encrypt col
- azure - 备份 Azure WAF 资源配置/设置的方法
- sql - 如何将查询转换为子查询以返回所有值
- javascript - 如何在 MongoDB 中通用更新字段?
- java - 如何使用 java 或 C++ 在 android studio 中运行 Mask_RCNN 模型
- r - 突出显示输出 Excel 文件中的单元格
- sql-server - SQL Server 动态筛选器
- c# - 如何从子类中的方法调用子类中被覆盖的父方法?
- fastapi - 如何在 fastapi 中定义具有多个 api 密钥的自定义安全性?