我正在编写 BBCode 风格的编辑器 - 我有充分的理由这样做,而不是使用现成的工作。我已经让大部分工作正常,但我需要测试一种条件。考虑以下标记
[para=2]
abc
[/para]
[para=0]
123
[/pa|ra]
上面的管道字符并不是一个拼写错误,您稍后会看到 - 我将它用作占位符。
现在想象下一个用户操作是插入 - 我的版本 - 粗体 Markdown 标签 [bold][/bold]。无论用户是否已经选择了一些现有文本,我的代码都可以处理此操作 - 例如abc。
但是,看看下面的情况
- 选择了 abc - 转换产生 [bold]abc[/bold]
- abc 的 c 之后的插入符 - 转换产生 abc[bold][/bold]
- 管道符处的插入号、|、最后一个字符[/para]
目前我的代码愉快地执行并返回[pa|[bold][/bold]ra]。
显然,我需要做的是确定用户的选择或当前插入符号位置不完全位于我的 Markdown 标签之一内(我已经有代码检查选择内容是否与 Markdown 标签重叠。
我需要按照“环顾四周”选择开始和结束位置的方式做一些事情,以检测该位置是否在 Markdown 标签内。
也许解决方案 - 正如“lookaround”一词所暗示的那样 - 是在正则表达式中。但是,我的正则表达式技能非常基础,因此我非常感谢任何帮助。
最佳答案
您可以使用caret plugin在光标位置分割文本文本并使用两个正则表达式来测试光标是否在标签内:
var editor = $('.editor');
var pos = editor.caret();
var text = editor.val()
var before = text.substring(0, pos);
var after = text.substring(pos, text.length);
if (before.match(/\[[^\[]*$/) && after.match(/^[^\[]*\]/)) {
alert('inside');
}
关于Javascript 检查周围的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18354968/