V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
zyb201314
V2EX  ›  JavaScript

求助一个正则表达式.

  •  
  •   zyb201314 · 221 天前 via Android · 1763 次点击
    这是一个创建于 221 天前的主题,其中的信息可能已经有所发展或是发生改变。
    字符串: 'txt=123,txt=kg66vv,hhj,txt=6966,ggg'
    需要获取包含"6"的字段结果即:['kg66vv','6966'] 这样一个表达式.
    13 条回复    2024-04-17 12:25:49 +08:00
    newaccount
        1
    newaccount  
       221 天前   ❤️ 1
    'txt=123,txt=kg66vv,hhj,txt=6966,ggg'.split(/[^a-z0-9]/i).filter(item => item.indexOf('6') !== -1)

    你就说用没用到正则吧
    Jwyt
        2
    Jwyt  
       221 天前
    [a-z0-9]*6[a-z0-9]* 这样?
    wangtian2020
        3
    wangtian2020  
       221 天前
    ```
    let str = `txt=123,txt=kg66vv,hhj,txt=6966,ggg`
    console.log(str.split(',').filter(v=>v.includes(`txt=`)).map(v=>v.substring(4)).filter(v=>v.includes(6)));
    ```
    正则?什么正则,懒得问 chatgpt 要正则写法了,JavaScript 直接梭
    857681664
        4
    857681664  
       221 天前
    (?<=txt=)[a-zA-Z0-9]+[6]+[a-zA-Z0-9]+(?=,)
    jgh004
        5
    jgh004  
       221 天前
    直接扔给 ai
    wangxiansheng2
        6
    wangxiansheng2  
       221 天前
    import re

    # 定义要匹配的字符串
    text = 'txt=123,txt=kg66vv,hhj,txt=6966,ggg'

    # 使用正则表达式匹配包含"6"的字段
    matches = re.findall(r'txt=([^,]*6[^,]*)', text)

    print(matches)
    然后再给你两个地址
    https://chat.openai.com/? GPT
    https://kimi.moonshot.cn/chat/coev3cg3r07df52qskn0 国内 kimi 你用这两个问,基本能解决 90%问题
    57ing
        7
    57ing  
       221 天前   ❤️ 1
    这种问题交给 gpt 来帮忙提效是最合适的:
    在 JavaScript 中,你可以使用正则表达式与`match`方法来达到类似的效果。这里是如何用 JavaScript 实现这一功能的例子:

    ```javascript
    const text = 'txt=123,txt=kg66vv,hhj,txt=6966,ggg';
    const pattern = /txt=([^,]*6[^,]*)/g;

    const matches = text.match(pattern);
    const results = matches ? matches.map(item => item.split('=')[1]) : [];
    console.log(results);
    ```

    这段代码的工作方式如下:
    - `/txt=([^,]*6[^,]*)/g`:这是正则表达式,其与上述 Python 例子中的功能相同,但使用了全局搜索标志`g`,以便找到所有匹配项。
    - `text.match(pattern)`:这将返回所有匹配的项,例如`['txt=kg66vv', 'txt=6966']`。
    - `item.split('=')[1]`:将每个匹配的字符串分割,并取等号后面的部分,这样就只剩下所需的字段值了。
    - `results`:这将存储最终提取的结果,如`['kg66vv', '6966']`。

    如果你的字符串结构有所不同,或者有其他特定的需求,可能需要调整正则表达式或处理逻辑。
    ZeekChatCom
        8
    ZeekChatCom  
       221 天前   ❤️ 1
    /[^=,]*6[^=,]*/gi
    jurassic2long
        9
    jurassic2long  
       221 天前
    当你有一个问题,决定用正则解决时,你有两个问题了。

    如果 op 为了练习正则,那么自己动手多试试吧,如果是为了解决这个问题,那真不如 split 加 is in 判断
    wxf666
        10
    wxf666  
       221 天前
    ```js
    s = 'txt=123,txt=kg66vv,hhj,txt=6966,ggg'
    s.match(/(?<=(?:^|,)[^=]+=)([^,]*6[^,]*)(?=,|$)/g)
    ```
    shuxhan
        11
    shuxhan  
       221 天前   ❤️ 1
    /\btxt=(\w*6\w*)\b/g
    dbak
        12
    dbak  
       221 天前
    echo 'txt=123,txt=kg66vv,hhj,txt=6966,ggg'|grep -oP '=.+?,'|awk -F'=|,' '$2~/6/{print $2}'|xargs -r -i echo -en \'{}\',|sed -r 's/^/[/;s/,$/]\n/'
    zyb201314
        13
    zyb201314  
    OP
       221 天前 via Android
    这种问题解决的方式或许有很多, 一为的学习, 2 为了解决问题, 直觉用正则解解决这种问题应该最简洁, 也是它的能力范围,但我想到的处理方式太过复杂,不是我想要的.
    感谢 @ramirezyolis808 的/[^=,]*6[^,]*/g,感谢各位大佬, 此贴就此终结.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5333 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:30 · PVG 09:30 · LAX 17:30 · JFK 20:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.