web前端之JavaScript正则表达式

本文详细介绍了JavaScript中正则表达式的使用方法,包括基本语法、量词、边界匹配等核心概念,并通过实例展示了如何利用正则表达式进行字符串处理。

web前端之JavaScript正则表达式

后面有代码:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

\d 表示数字
\d? ?表示0个或者一个
\d+ +表示一个或者多个
\d{3} 表示三个
\d{3,5} 表示三到五个
\d{3,} 表示至少出现3次
\d* *表示0到任意个
\b 表示单词边界
\B 表示非单词边界
\bis\b 表示查找“ is ”的
. 表示任意字符
\ 表示转译
http:(\/\/.+\.jpg) 用()进行分组
$1 获取其内部东西

[]表示或
^表示开头
$表示结尾
g表示全局
\d{4}[/-]\d{2}[/-]\d{2}
\w 表示一个单词字符


字面量:var reg=/\bis\b/g;
构造函数:var reg=new RegExp('\\bis\\b','g');
修饰符:
g:global全文搜索;不添加,搜索到第一个匹配停止
i:ignore case忽略大小写,不添加,大小写敏感
m:multiple lines多行搜索

子符类:'a1b1c1d3f3'.replace(/[abc]/g,'X')
字符类取反:'a1b1c1d3f3'.replace(/[^abc]/g,'X')
范围类:'a1b1c1d1f1e1asd'.replace(/[a-z]/g,'Q');
很多个范围类:'a1b1c1d1f1e1asdABGS123BGJS'.replace(/[a-zA-Z]/g,'Q');
在选择多个范围类的时候需要匹配“-”,那就在最后添加“-”就可以了:'2010-07-08'.replace(/[0-9-]/g,'A');

预定类:匹配一个 ab+数字+任意字符  的字符串:ab\d.

边界:'This is a boy'.replace(/\Bis\b/g,'0')
@开始:'@123@abc@'.replace(/^@./g,'Q')
@结束:'@123@abc@'.replace(/.@$/g,'Q')
多行匹配:
'@123
@456
@789'.replace(/^@\d/gm,'X')

量词:
\d 表示数字
\d? ?表示0个或者一个
\d+ +表示一个或者多个
\d{3} 表示三个
\d{3,5} 表示三到五个
\d{3,} 表示至少出现3次
\d* *表示0到任意个


正则表达式贪婪模式:
'12345678'.replace(/\d{3,6}/g,"A");

非贪婪模式(后面加一个“?”就可以了):
'123456789'.match(/\d{3,5}?/g)

分组:
'a1b1c1d1'.replace(/[a-z]\d{3}/g,"X")
"a1b1c1d1"
'a1b1c1d1'.replace(/([a-z]\d){3}/g,"X")
"Xd1"

或:
'AbcdEf'.replace(/Abcd|Ef/g,'X');
"XX"
'AbcdEfAbabEf'.replace(/Ab(cd|ab)Ef/g,'X');
"XX"

反向引用:
'2016-12-21'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2-$3-$1')
"12-21-2016"

前瞻(前面一个单词字符后面一个数字):
'a2*3'.replace(/\w(?=\d)/g,'X')
"X2*3"
'a2*34V8'.replace(/\w(?=\d)/g,'X')
"X2*X4X8"
'a2*34VV'.replace(/\w(?=\d)/g,'X')
"X2*X4VV"
'a2*34VV'.replace(/\w(?!\d)/g,'X')
"aX*3XXX"

对象属性:
g:global全文搜索;不添加,搜索到第一个匹配停止
i:ignore case忽略大小写,不添加,大小写敏感
m:multiple lines多行搜索
lastIndex:是当前表达式匹配内容的最后一个字符的下一个位置
source:正则表达式的文本字符串


test方法:
var reg1=/\w/;
var reg2=/\w/g;
reg1.test('a');
true
reg1.test('$');
false
reg2.test('a');
true
reg2.test('a');
false
reg2.test('a');
true
reg2.test('a');
false
while(reg2.test('ab')){
    console.log(reg2.lastIndex);
}

exec方法:
非全局调用:
var reg3=/\d(\w)\d/;
var reg4=/\d(\w)\d/g;
var ts='1a2b3c4d5e';
var ret=reg3.exec(ts);
console.log(reg3.lastIndex + '\t' +ret.index+ '\t' + ret.toString());
console.log(reg3.lastIndex + '\t' +ret.index+ '\t' + ret.toString());
while(ret=reg4.exec(ts)){
    console.log(reg4.lastIndex + '\t' +ret.index+ '\t' + ret.toString());
}
0   0   1a2,a
0   0   1a2,a
3   0   1a2,a
7   4   3c4,c

非全局下lastIndex不生效
toString()):第一个正则获取的字段,第二个正则中的分组的字段


全局下:
第一个数:第一次获取到之后的,下一个字符的位置
第二个数:从第几个字符后获取到和正则匹配的
第三个数:第一个正则获取的字段,第二个正则中的分组的字段


字符串对象方法:
var reg3=/\d(\w)\d/;
var reg4=/\d(\w)\d/g;
var ts='1a2b3c4d5e';
var ret=ts.match(reg3);
console.log(ret);
console.log(ret.lastIndex + '\t' +ret.index+ '\t');
ret=ts.match(reg4);
var ret=ts.match(reg4);
console.log(ret);
console.log(ret.lastIndex + '\t' +ret.index+ '\t');

'a1b2c3d4'.split(/\d/g)
<think>好的,我现在要处理用户关于Android 12中RKNN开发配置和使用教程的问题。首先,我需要回顾用户提供的引用内容,看看是否有相关的信息。 用户提供了三个引用。引用1提到了RKNN Model Zoo和RKNN Toolkit2的环境配置,包括安装Miniconda3。引用2是关于系统镜像下载,特别是Ubuntu 22.04版本和导出ONNX模型。引用3讨论了RV1808/1126使用RKNN作为MediaPipe推理后端的步骤,包括配置参数如use_rga、use_mmap和data_type的设置,以及反量化的处理。 用户的问题集中在Android 12上,所以需要将引用中的信息与Android系统关联起来。引用3提到了MediaPipe和RKNN的集成,这可能适用于Android开发,但需要确认是否支持Android 12。此外,RKNN Toolkit2的环境配置可能在不同平台上有所不同,用户可能需要针对Android进行调整。 接下来,我需要考虑Android开发中RKNN的一般步骤,比如环境准备、模型转换、集成到Android应用、配置参数和性能优化。结合引用中的信息,模型转换部分可以参考引用2提到的导出ONNX模型,然后使用RKNN Toolkit转换为RKNN格式。引用3中的配置参数(如use_rga、use_mmap、data_type)可能在Android中同样适用,但需要查阅相关文档确认。 可能还需要指导用户如何将RKNN库集成到Android项目中,比如添加依赖项或NDK配置。此外,性能优化方面,引用3提到的反量化处理可能需要特别注意,尤其是在Android设备上的实现。 最后,确保回答结构清晰,分步骤说明,并引用提供的资料。需要验证引用中的信息是否适用于Android 12,例如系统镜像是否支持,或者是否有特定版本的要求。如果某些步骤在引用中没有明确说明,可能需要提示用户参考官方文档或社区资源。</think>### Android 12 RKNN 开发配置与使用教程 #### 1. **环境准备** - **系统镜像与工具链**: 根据引用[2],建议使用Ubuntu 22.04作为开发环境,并下载Orange Pi 5 Pro等支持RKNN的硬件镜像。对于Android 12开发,需确保RKNN Toolkit2适配Android NDK版本(推荐NDK 21+)[^2]。 - **安装RKNN Toolkit2**: 参考引用[1],通过Miniconda3配置Python环境(建议Python 3.8),并安装RKNN Toolkit2以支持模型转换与推理。命令示例: ```bash pip install rknn_toolkit2 ``` #### 2. **模型转换(ONNX转RKNN)** - **导出ONNX模型**: 使用PyTorch或TensorFlow等框架导出模型为ONNX格式(引用[2])。 - **转换为RKNN格式**: 编写RKNN配置文件(`config.yml`),指定输入尺寸、量化方式等参数。示例代码: ```python from rknn.api import RKNN rknn = RKNN() rknn.config(target_platform='rk3568', mean_values=[[127.5]], std_values=[[127.5]]) rknn.load_onnx(model="model.onnx") rknn.build(do_quantization=True, dataset="dataset.txt") rknn.export_rknn("model.rknn") ``` #### 3. **Android项目集成** - **添加RKNN库依赖**: 将编译好的RKNN动态库(`librknnrt.so`)和模型文件(`model.rknn`)放入Android项目的`jniLibs`目录。 - **JNI接口开发**: 通过JNI调用RKNN的C/C++ API实现推理。关键配置参考引用[3]: ```cpp #include <rknn/rknn_runtime.h> rknn_context ctx; int ret = rknn_init(&ctx, model_path, 0, 0, nullptr); ret = rknn_inputs_set(ctx, input_num, input_attrs); ret = rknn_run(ctx, nullptr); ret = rknn_outputs_get(ctx, output_num, output_attrs, nullptr); ``` #### 4. **关键配置参数** - **use_rga与use_mmap**: 根据引用[3],若Android设备不支持硬件加速(如RGA),需将`use_rga`和`use_mmap`设为`false`。 - **数据量化类型**: `data_type`可选`uint8`或`fp32`。若选`uint8`,需手动实现反量化;若选`fp32`,RKNN会自动处理[^3]。 #### 5. **性能优化** - **多线程推理**: 利用Android的`ThreadPoolExecutor`并行处理输入数据。 - **内存优化**: 启用`use_mmap`(若支持)减少内存拷贝开销,或通过零拷贝技术直接操作物理内存。 #### 6. **调试与验证** - **日志输出**: 启用RKNN的调试模式(`RKNN_LOG_LEVEL=DEBUG`)查看详细运行信息。 - **性能分析**: 使用`rknn.query(RKNN_QUERY_PERF_DETAIL)`获取各层耗时,针对性优化模型结构。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值