我正在编写一个 BBCode 风格的编辑器——我有充分的理由这样做,而不是使用现成的工作。我已经让它大部分工作正常,但我需要测试一种情况。考虑以下标记
[para=2]
abc
[/para]
[para=0]
123
[/pa|ra]
上面的管道字符不是您稍后会看到的错字 - 我将其用作占位符。
现在想象下一个用户操作是插入 - 我的版本 - 粗体降价标签 [bold][/bold]。无论用户是否已经选择了一些现有文本(例如 abc),我的代码都可以处理此操作。
但是,请看以下情况
- abc selected - 转换产生 [bold]abc[/bold]
- abc 的 c 之后的插入符号 - 转换产生 abc[bold][/bold]
- 管道上的插入符号,|,最后一个字符 [/para]
目前,我的代码很乐意执行并返回 [pa|[bold][/bold]ra]。
显然,我需要做的是确定用户的选择或当前插入符号位置不完全位于我的降价标签之一内(我已经有代码检查选择不与降价标签重叠。
我需要按照“环顾四周”选择开始和结束位置的方式做一些事情,以检测该位置是否在降价标签内。
也许解决方案——正如“环视”这个词所暗示的——是在正则表达式中。但是,我的正则表达式技能非常基础,所以我非常感谢任何帮助。