开发者社区> 问答> 正文

如何写这样一个过滤字符串的正则?:报错

57< img src="/dev-build/5c1800f8cea587969777d0e2a11ec895.png" class="face-pic" data-labface="4">fd< img src="/dev-build/1157a424588a6732a95ac1d622e129d0.png" class="face-pic" data-labface="17">12< img src="/dev-build/bc2e80fa39a2f7d95737fdbec02c0b27.png" class="face-pic" data-labface="21">比比

这里有这样一个字符串,我想取出文字内容和图片上面的data-labface的属性,按照顺序组成一个数组,

这是一段,用户自行输入的文本内容。

展开
收起
kun坤 2020-06-14 08:16:11 599 0
1 条回答
写回答
取消 提交回答
  • 问一下:

    这个确实是用户输入的字符串吗? 还是用户输入内容的html源码?

    个人觉得既然是js里面做, 可以考虑下面方式:

    var srcStr = '57< img src="/dev-build/5c1800f8cea587969777d0e2a11ec895.png" class="face-pic" data-labface="4">fd< img src="/dev-build/1157a424588a6732a95ac1d622e129d0.png" class="face-pic" data-labface="17">12< img src="/dev-build/bc2e80fa39a2f7d95737fdbec02c0b27.png" class="face-pic" data-labface="21">比比'
    	// "<"和"img"之间有个空格, 这不是合法的html.
    	.replace(/< img/g, '
      
    
      



    ######哇瑟,我测试了下是我要的结果呢,谢谢这位大神。。。。######空格是我黏贴进去的时候产生的,可以忽略。。。######这个是用户输入的一段文本,里面包括文字内容和表情,图片就是表情,我想取出的是 文本内容 和 表情符号中的data-labface属性的值, 例如 ['57', '4', 'fd', '17', '12', '21', '比比']######

    今儿个心情好,做一下活雷锋
    JavaScript:
    ====================
    var myregexp = /src="([^"]+)" class="face-pic" data-labface="(\d+)"/img;
    var match = myregexp.exec(subject);
    while (match != null) {
    for (var i = 0; i < match.length; i++) {
    // matched text: match[i]
    }
    match = myregexp.exec(subject);
    }

    Java:
    ====================

    try {
    Pattern regex = Pattern.compile("src=\"([^\"]+)\" class=\"face-pic\" data-labface=\"(\\d+)\"", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.MULTILINE);
    Matcher regexMatcher = regex.matcher(subjectString);
    while (regexMatcher.find()) {
    for (int i = 1; i <= regexMatcher.groupCount(); i++) {
    // matched text: regexMatcher.group(i)
    // match start: regexMatcher.start(i)
    // match end: regexMatcher.end(i)
    }
    }
    } catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
    }

    php

    =================

    preg_match_all('/src="([^"]+)" class="face-pic" data-labface="(\d+)"/im', $subject, $result, PREG_SET_ORDER);
    for ($matchi = 0; $matchi < count($result); $matchi++) {
    for ($backrefi = 0; $backrefi < count($result[$matchi]); $backrefi++) {
    # Matched text = $result[$matchi][$backrefi];
    }
    }

    ######

    js代码:

    console.log('57< img src="/dev-build/5c1800f8cea587969777d0e2a11ec895.png" class="face-pic" data-labface="4">fd< img src="/dev-build/1157a424588a6732a95ac1d622e129d0.png" class="face-pic" data-labface="17">12< img src="/dev-build/bc2e80fa39a2f7d95737fdbec02c0b27.png" class="face-pic" data-labface="21">比比'.match(/data-labface="[0-9]+"/gi));



    自己根据情况改正则,这里只匹配了数字,大小写不敏感
    /data-labface="[0-9]+"/gi

    ==========================

    nginx +tomcat+memcached集群,写session不生效:报错

    (2台)tomcat+memcached做了集群,sessionID在不同tomcat上相同的,但是给session赋值的时候,发现两边session不同步.非要给nginx 的upstream 配置上 jvm参数后,才能同步,这样配置对不?

    还是配置的问题吧,如果你给nginx加上配置可以的话,那就不是mem的共享session了,而是nginx提供的session,

    所以你需要配置的还是tomcat与mem之间的session共享问题

    附:

    Tomcatsession共享问题,解决方案选择:

    多个tomcat要一起协同工作有几种办法,可以考虑的方案有以下几个:

      1.使用tomcat自带的cluster方式,多个tomcat见自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。

      2.利用nginx的基于访问iphash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。但是我们的应用很可能是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。

      3. 利用memcached把多个tomcatsession集中管理,这是最直接的解决方案,但是操作起来也最为复杂

        我们的系统既要求性能,又要比较好的利用上负载均衡,所以第3个方案是首选。接下来就是安装搭建之路了。

    ######session写进memcached呢
    ######

    session写进memcached了.打开页面的时候,发现两边tomcat的session内容一致,当给某个session.setattribute后,两边就不一样,删除也是


    ###### @快慢机 没有解决. 先用着了######这个问题楼主怎么解决的啊######

    @xf

    我们使用memcached共享.context.xml的配置.这样设置有问题吗

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:10.24.60.2:12000"
        requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />

    ######

    @蟋蟀哥哥 

    memcached不一定非要2台吧?

    ######

    一台。。我也认为是客户端轮询两台webserver造成的问题。

    nginx hash下。。应该能解决

    ######@ 蟋蟀哥哥   要是hash的话,服务器宕机,还是没办法无缝切换 .######一台的话系统形成单点了, 可靠性有问题######@ JackyYeong memcached确实只有一台,主要问题是tomcat2台之间session不复制,在nginx上使用hash策略,也不能保证宕机切换状态保持.######session可以共享了,但是刷新了会丢失
    2020-06-14 08:16:16
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载