React Native Text组件修改部分文本样式。

静态文本:

“Text组件”作为最基础的文本组件,我们经常会在其上遇到这样的需求,一串文本信息,提取部分关键字改变其样式,比如高亮颜色改变等等。

比如实现:“我已阅读并同意《使用协议》《隐私条款》。”

通过嵌套Text组件可以很轻松实现。

<Text style={{ fontSize: 12, color: 'gray' }}>
	我已阅读并同意
	<Text style={{ color: 'blue' }}>《使用协议》</Text><Text style={{ color: 'blue' }}>《隐私条款》</Text></Text>

动态文本:

固定模板的静态文本很容易实现部分文本样式的修改,但是当文本关键字不固定的时候,比如动态传入一串文本,高亮其中所有数字(这里暂取整数、浮点数、百分数)。可以采用如下方法:

原文:

2019年10月到2020年9月,Github上开发者数量超过5600万;72%的财富50强公司在使用Github;超6000万新项目被创建;超过19亿的贡献被添加。在活跃用户的地理分布上,北美用户最多(34%),不过相较于去年北美用户减少了2%;亚洲次之(30.7%),亚洲用户增长了1.1%。这是负数-66.66%。

期望结果:

201910月到20209月,Github上开发者数量超过5600万;72%的财富50强公司在使用Github;超6000万新项目被创建;超过19亿的贡献被添加。在活跃用户的地理分布上,北美用户最多(34%),不过相较于去年北美用户减少了2%;亚洲次之(30.7%),亚洲用户增长了1.1%。这里是负数-66.66%

实现思路:
  1. 利用正则表达式匹配出所有数字:
const keyTextArr = content.match(/-?[0-9]+\.?[0-9]*%?/g);
  1. 利用正则表达式匹配出其他非数字部分:
const restTextArr = content.split(/-?[0-9]+\.?[0-9]*%?/g);
  1. 通过for循环组成一个新的内容数组,并为匹配出的数字增加样式标签:
const mainTextArr = [];
restTextArr.forEach((item, index) => {
    mainTextArr.push(item);
    if (keyTextArr && keyTextArr[index]) {
    	mainTextArr.push(
      		<Text style={{ color: 'blue' }}>
      			{keyTextArr[index]}
      		</Text>
      	);}
});
  1. 效果图:
    运行效果图
完整代码:
import React from 'react';
import { Text, View } from 'react-native';

const HelloWorldApp = () => {
  const renderContent = () => {
    let content =
      '2019年10月到2020年9月,Github上开发者数量超过5600万;72%的财富50强公司在使用Github;超6000万新项目被创建;超过19亿的贡献被添加。在活跃用户的地理分布上,北美用户最多(34%),不过相较于去年北美用户减少了2%;亚洲次之(30.7%),亚洲用户增长了1.1%。这是负数-66.66%。';

    const keyTextArr = content.match(/-?[0-9]+\.?[0-9]*%?/g);
    const restTextArr = content.split(/-?[0-9]+\.?[0-9]*%?/g);
    const mainTextArr = [];
    restTextArr.forEach((item, index) => {
      mainTextArr.push(item);
      if (keyTextArr && keyTextArr[index]) {
        mainTextArr.push(
          <Text style={{ color: 'blue' }}>{keyTextArr[index]}</Text>
        );
      }
    });

    return mainTextArr;
  };

  return (
    <View
      style={{
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
      }}>
      <Text style={{ fontSize: 12, color: 'gray' }}>{renderContent()}</Text>
    </View>
  );
};
export default HelloWorldApp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值