仅匹配第一次和最后一次出现-JavaScript
Matching First and Last Occurrences Only - JavaScript
所以我正在用JavaScript做一个简单的BBCode解析器,没有什么太花哨的。我首先需要得到一个正则表达式,它将只匹配BBCode,并且只匹配标记的第一次和最后一次出现。这将有助于处理相互嵌套的项目,如
[b][c red]This should output bold red text[/c][/b]
应该解析为
<span style="font-weight: bold;><span style="color: red;">This should output bold red text</span></span>
当前的"Master"regex(检测字符串中是否有BBCode的regex)如下所示。
('[{1}([^'[]{1,3})(| .*?)']{1}(.*?)'[{1}('/{1}[^']]{1,3})']{1})
有没有办法改变这一点,只检测第一场和最后一场比赛?
注意:我想排除诸如[[Main Page]]
的Wiki链接
正则表达式不是该作业的合适工具,就像它不是解析HTML的合适作业一样。这是因为它是一种上下文无关的语言,而不是正则语言(因此正则表达式)。
然而,我永远不会抱怨有人把某件事当作"解决小问题的练习"(这就是我参加SO的原因)。你说我的评论有帮助,所以我会发布它并添加解释。
'[('w{1,3})'](.*)'['/'1']
<$1>$2</$1>
首先,我们寻找[
,然后是我们的第一组1-3
"单词"字符([a-zA-Z0-9_]
),然后是]
。这个'w
可以替换为[^']]
,以匹配除括号外的任何字符或您选择的任何其他字符(我不完全确定BBCode规范以及标签可以由什么组成)。然后我们将(贪婪地)将0+
字符捕获到另一组中。最后,我们寻找包含我们的第一个捕获组(引用'w{1,3}
的'1
)的['
,然后是]
。由于我们在(.*)
中使用了贪婪捕获,它将一直持续到最后一个结束标记。
现在我们有两个捕获的组,一个带有标签,另一个带有内容。您可以通过简单地引用组将[
更改为<
:<$1>$2</$1>
Regex101
- 在JavaScript中重构上个月的第一天和最后一天的代码(node.js)
- Javascript匹配以从URL中删除部分文件名-替换最后一次出现的内容
- JavaScript只有在最后一次被调用时才运行函数
- 从'获取本月的最后一天;2015-02-23'字符串(javascript)
- 如何使用javascript点击最后一个子链接
- 如何使用 JavaScript 函数在 JSP 中使用按钮移动到数据库的最后一条记录
- 如何使用angularJs/Javascript/Jquery获取表的最后一条记录并更新列值并插入到具有新记录的同一列
- 在输入时,JavaScript 验证仅在最后一个中起作用
- JavaScript:获取每月的第一天和最后一天,格式为 YYYY.唰
- 使用输入多少次掷骰子,然后只输出最后一掷Javascript上的两个骰子的总和
- 在 JavaScript 中处理数组中的最后一项
- Joomla javascript(JQuery)手风琴菜单总是在单击最后一个子元素时展开所有节点
- 如何在 PHP 中制作最后一个数组编号 id +1 的 JavaScript 数组
- Javascript幻灯片在节目开始时快速出现最后一张图像
- Javascript获取HTML块中的最后一段文本
- 防止删除最后一个子级 JavaScript
- JavaScript for 循环只返回数组中的最后一项
- Javascript - 如何获取十进制数后的最后一位数字
- 如何在多页面中制作一个 JavaScript 表单向导,其中包含下一页,并取消并返回并提交最后一页
- Javascript最后一封信被切断