Javascript Regex不格式化每个实例
Javascript Regex not formatting each instance
我正在制作一个简单的基于JavaScript的所见即所得编辑器,使用正则表达式将其转换为html。
这是我使用的javascript转换方法
message = message.replace(/'*'*(.*)'*'*/g, "<b>$1</b>");
它将用两个**包围的文本转换为粗体。问题是,它并不是对每个实例都这样做。相反,它从**的第一个实例开始到最后一个实例。
所以**bold text** **bold text**
给我
粗体文本* *粗体文本
<b>bold text* *bold text</b>
不是<b>bold text</b> <b>bold text</b>
我如何设置它来转换每个实例,而不是将它们分组在一起?
您需要将量词更改为.*?
以使其不贪婪:
message = message.replace(/'*'*(.*?)'*'*/g, "<b>$1</b>");
// ^
您当前的regex是一种不错的,并捕获您的前两个星星之后的任何字符,因为.*匹配任何regex将继续吃你的数据,直到它找到**的最后一次出现,这是在最后,这就是为什么你得到的结果。
试着用:
message = message.replace(/'*'*(.*?)'*'*/g, "<b>$1</b>");
这个小?使正则表达式非贪婪,这意味着它将在第一次出现两个星星时停止。或者你可以这样做:
message = message.replace(/'*'*([A-Za-z0-9_- ]+)'*'*/g, "<b>$1</b>");
问题是你的(.*)
正在捕获一切。这应该可以解决您的问题:
'*'*([^'*]+)'*'*
这个的问题是,它将匹配这个:**fjffj**
而不是这个:**ffff*gggg**
相关文章:
- ES6构造函数返回基类的实例
- jQuery中是否内置了任何字符串格式化函数
- KnockoutJS-组件-多个实例
- 为什么无法在TypeScript中导出类实例
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- fluxxor向一个flux实例添加一组以上的操作
- 使用jQuery获取Dropzone实例/对象
- "实例范围”;TypeScript类的getter/setter
- 如何在速度模板中获取LiferayPortlet实例id
- 同一项怎么可能在一个实例中未定义,却在另一个实例上定义
- 实例创建(JS)
- 将字符串转换为格式化日期
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- 显示模块模式在Knockout中设置模型的新实例
- 如何获取单选按钮的多个实例的选定单选按钮值
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 在HTML画布上格式化文本
- 当同一浏览器的两个实例浏览时,Javascript页面如何具有唯一的ID
- Javascript Regex不格式化每个实例
- Moment JS解析整个JSON数组和格式化多个日期实例