HarmonyOS 鸿蒙Next 有个文本截取和正则的问题

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 有个文本截取和正则的问题

如果文本是   我推荐一些表情, [NO][OK][爱情][飞吻][跳跳][发抖][怄火][转圈], 这些表情很不错 使用你的demo的代码如下

let regExp = /([[\u4e00-\u9fa5]+])/g let result = this.imMessageInfo.text.split(regExp);

结果 [NO][OK], 是result的第一个元素, 期望result的第一个元素是[NO], 第二个元素是[OK], 第三个元素是[爱情], 依次类推, 请问怎么修改正则表达式,可以实现预期效果?


更多关于HarmonyOS 鸿蒙Next 有个文本截取和正则的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
interface textObj {
  type: string,
  content: string | undefined
}
@Entry
@Component
struct TextExample {
  @State text: string = '我推荐一些表情, [NO]、[OK]、[爱情]、[跳跳], 这些表情很不错';
  @State textArr: textObj[] = [];
  //文本和图片映射表
  imageMap = new Map([
    ["[NO]", 'app.media.startIcon'],
    ["[OK]", 'app.media.startIcon'],
    ["[爱情]", 'app.media.startIcon'],
    ["[跳跳]", 'app.media.startIcon']
  ])
  aboutToAppear() {
    this.regText()
  }
  //解析文本
  regText() {
    //将文本根据[文字]进行分割成数组
    let reg = /(\[[\u4e00-\u9fa5_a-zA-Z0-9]+\])/g //这个是匹配任意字符的正则,包含中文,英文字母和数字及 _
    let result = this.text.split(reg);
    this.textArr = [];
    console.log(JSON.stringify(result))
    //遍历数组
    result.forEach(item => {
      if (item) {
        //设置类型,放入数组
        let isImage = item.match(reg)
        this.textArr.push({
          type: isImage ? 'image' : 'text',
          content: isImage ? this.imageMap.get(item) : item
        })
      }
    })
    console.log(JSON.stringify(this.textArr))
  }
  build() {
    Row() {
      Column() {
        Text(undefined) {
          ForEach(this.textArr,(spanItem:textObj)=>{
            //根据不同类型显示ImageSpan或Span
            if(spanItem.type==='image'){
              ImageSpan($r(spanItem.content)).width(20).height(20)
            }
            if(spanItem.type==='text'){
              Span(spanItem.content)
            }
          })
        }
        .fontSize(20)
        .copyOption(CopyOptions.InApp)
        .textAlign(TextAlign.Start)
        .borderWidth(1)
        .padding(10)
        .width('100%')
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 有个文本截取和正则的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中处理文本截取和正则表达式的任务,可以利用鸿蒙系统提供的原生API来完成。

对于文本截取,鸿蒙提供了字符串处理函数,比如StrSubStr,它可以直接用于从源字符串中截取子字符串。你需要指定源字符串、起始位置和截取长度。

对于正则表达式,鸿蒙系统支持POSIX风格的正则表达式处理。你可以使用regex.h头文件中的函数,比如regcomp来编译正则表达式,regexec来执行匹配,以及regfree来释放编译后的正则表达式对象。

例如,要截取一个字符串中的数字部分,你可以使用正则表达式[0-9]+。编译这个正则表达式后,对目标字符串执行匹配,匹配成功后可以通过regmatch_t结构体获取匹配的位置,然后结合字符串截取函数得到所需的子字符串。

请注意,鸿蒙系统的API可能会随着版本更新而有所变化,建议查阅最新的鸿蒙开发者文档以获取最准确的信息。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部