小程序正则替换

本文介绍了如何使用正则表达式进行字符串替换,例如将日期中的短横线替换为点,以及在HTML中替换图片标签以调整样式。示例展示了JavaScript中的replace方法配合正则表达式的使用,对于批量处理字符串和HTML内容非常实用。
  • 使用正则替换字符串

原始数据:

2020-8-3 18:18:23

str.replace(new RegExp('-','g'),'.');

或

str.replace(/-/g,'.');

替换结果:

2020.8.3 18:18:23

  • 使用正则替换HTML中的图片 

原始数据:

 <p><img src="https://www.demo.com/image/20210702/1625193028451591.jpeg" title="1625193028451591.jpeg" alt="1625193028451591.jpeg" style="width: 640px; height: 427px;"/></p><p>hello world</p>

let reg = new RegExp("<img [^>]*src=['\"]([^'\"]+)[^>]*>", "g");
html = html.replace(reg, function (match, capture) {
    console.log(match)
    console.log(capture)
    return '<img src="'+capture+'" style="width:100%;height:auto;" />'
});

或者 

html = html.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, function(match, capture){
    console.log(match)
    console.log(capture)
    return '<img src="'+capture+'" style="width:100%;height:auto;" />'
});

替换结果:

 <p><img src="https://www.demo.com/image/20210702/1625193028451591.jpeg" style="width:100%;height:auto;" /></p><p>hello world</p> 

 

### 微信小程序正则表达式未生效的解决方法 在微信小程序开发过程中,开发者常遇到正则表达式无法正常匹配或校验失败的问题。这通常与正则语法、转义字符、引擎支持度以及运行环境(如 iOS 和 Android 差异)有关。 #### 1. 确保正则表达式语法兼容性 微信小程序使用的 JavaScript 引擎对某些现代正则特性(如命名捕获组、后向断言等)的支持存在限制,尤其在 iOS 平台上容易出现“Invalid regular expression”错误[^2]。例如以下使用命名捕获组的表达式: ```javascript const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; ``` 该写法可能导致 iOS 设备报错。为避免此类问题,应尽量使用基础正则语法,避免使用 ES6+ 中新增的高级正则功能。 #### 2. 使用字符串形式定义正则表达式 若需动态构建正则表达式或在 JSON 配置中传递正则模式(如 `uni-forms-item` 的 `pattern` 属性),应以字符串形式书写,并注意双反斜杠的正确转义[^1]。例如: ```json { "pattern": "^1[3456789]\\d{9}$", "errorMessage": "请输入正确的手机号" } ``` 上述写法确保了正则表达式在 JSON 中被正确解析,同时适配微信小程序的校验机制。 #### 3. 在 JavaScript 中手动执行正则测试 对于复杂校验逻辑,推荐通过编程方式使用 `RegExp` 对象进行判断,而非依赖组件内置的 `pattern` 属性。例如验证手机号码: ```javascript function validatePhone(value) { const reg = /^1[3456789]\d{9}$/; return reg.test(value); } ``` 这种方式可绕过部分组件对正则表达式的处理缺陷,提高兼容性和可控性[^3]。 #### 4. 处理输入时过滤非法字符 若需在用户输入过程中实时过滤非目标字符(如仅允许汉字),应在 `bindinput` 事件中使用正则替换非法内容: ```javascript Page({ data: { inputValue: '' }, handleInput(e) { let value = e.detail.value; // 只保留中文字符 let chineseOnly = value.replace(/[^\u4e00-\u9fa5]/g, ''); this.setData({ inputValue: chineseOnly }); } }); ``` 此方法确保输入框内容始终符合预期格式,且不会因临时英文字符(如拼音输入法中间状态)导致异常。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值