【问题标题】:javascript regex multiline selector bbcodejavascript 正则表达式多行选择器 bbcode
【发布时间】:2013-06-30 20:15:38
【问题描述】:

我在装有最新操作系统的 mac book air 上使用最新版本的 chrome 浏览器。我正在尝试在 javascript 中创建一个 BBcode 解析器。我可以轻松解析一行代码,例如 [b]a[/b] 但是当它是多行时,它找不到它。我做了一些研究,发现 javascript 的多行 (m) 标签存在一些问题。我尝试了一些替代解决方案,但它们似乎都不起作用。以下是我的一些尝试:

var reg = new RegExp('\\[b\](.+)\\[\/b\]','igm');
var reg = new RegExp('\\[b\]([\s\S]+)\\[\/b\]','ig');
var reg = new RegExp('\\[b\]([^]+)\\[\/b\]','ig');
var reg = new RegExp('\\[b\]([\n|\r|.]+)\\[\/b\]','ig');

http://jsfiddle.net/zw6wF/1/

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: javascript regex parsing multiline bbcode


    【解决方案1】:

    这必须有效:

     var reg = new RegExp('\\[b\\]([\\s\\S]+?)\\[/b\\]', 'ig');
    

    或更好:

    var reg = new RegExp('\\[b]([\\s\\S]+?)\\[/b]', 'ig');
    

    因为您不必转义右方括号

    【讨论】:

    • 我认为问题在于 + 太贪心了。他的 jfiddle 示例在一行中显示了多个 b 标签。否则我同意这应该有效
    • @Denomales:没有问题,你必须像在 java 中那样使用这种语法对 all 进行双重转义!但你说得对,懒惰的量词更好。
    • @Denomales 是对的。我试过了,如果有多个标签,它只选择第一个打开的标签和最后一个关闭的标签,忽略两者之间的所有内容
    • 是的,这对于具有多个标签的行效果更好。我什至没有注意到双转义斜线 +1
    • 甚至/\[b]([\s\S]+?)\[\/b]/ig。我推荐/\[b]([^]+?)\[\/b]/ig,但这在某些较旧的 IE 版本中不起作用。
    猜你喜欢
    • 2013-07-04
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多