【问题标题】:JavaScript regex to extract different parts of a stringJavaScript 正则表达式提取字符串的不同部分
【发布时间】:2013-02-10 12:38:26
【问题描述】:

这是一个有趣的问题——我正在寻找一种 JavaScript 正则表达式解决方案来从字符串中提取不同的部分。非常感谢任何输入。

示例 -

";1XYZ123_UK;1;2.3;evt14=0.0|evt87=0.0,;1XYZ456_UK;4;5.6;evt14=0.0;fly;0;0;;;"

我试图从字符串中提取这些位,忽略其余部分-

“1XYZ123_UK;2;3;1XYZ456_UK;4;5.6;”

基本上提取以 1XYZ 开头的任何内容,直到遇到 'evt'。

【问题讨论】:

  • 总是以 1XY.. 开头吗?
  • ";1XYZ123_UK;1;2.3;evt14=0.0|evt87=0.0,;1XYZ456_UK;4;5.6;evt14=0.0".replace(/evt\d+=\d+\.\d+/ g, '') 将返回 ";1XYZ123_UK;1;2.3;|,;1XYZ456_UK;4;5.6;"
  • Lloyd - 是的,它总是以 1XYZ 开头,但它可以在字符串中的任何位置。谢谢。
  • 如果有趣,你一定要尝试一下,不是吗?
  • Felix - 我做到了,test.match(/^(((?!evt).)*)((?=1XYZ).)*/g)。需要不同的解决方案来了解我可以改进的地方。

标签: javascript regex match regex-negation


【解决方案1】:
var s = ';1XYZ123_UK;1;2e.3;evt14=0.0|evt87=0.0,;1XYZ456_UK;4;5.6;evt14=0.0';
var r = s.match(/1XYZ((?!evt).)*/g);

会给你你想要的字符串:

["1XYZ123_UK;1;2e.3;", "1XYZ456_UK;4;5.6;"]

【讨论】:

    【解决方案2】:
    var s= ";1XYZ123_UK;1;2.3;evt14=0.0|evt87=0.0,;1XYZ456_UK;4;5.6;evt14=0.0"
    
    s = s.replace(/(evt.+?(?:\||;|$))/g, "");
    
    console.log(s) // ";1XYZ123_UK;1;2.3;1XYZ456_UK;4;5.6;"
    

    【讨论】:

    • 非常感谢。差不多了。一个小查询 - 如果字符串包含更多单词怎么办 - 示例 - ";1XYZ123_UK;1;2.3;evt14=0.0|evt87=0.0,;1XYZ456_UK;4;5.6;evt14=0.0;fly;0;0;;;"
    • 请正确使用语法高亮来更新您的问题:)
    【解决方案3】:

    使用组 ((...)) 来捕获部分匹配字符串。成功匹配后,可以通过从String.matchRegex.exec 返回的数组访问捕获的子字符串。

    数组的第一个元素(索引 0)是整个匹配,下一个(索引 1)是第一个捕获。

    例如。

    var re = /1XY(.*)evt/
    var result = theString.match(re)
    

    那么,如果有匹配(result 不为空)那么

    result[0]
    

    将是整场比赛(从 1XY 开始,到 evt 结束)而

    result[1]
    

    将是这些字符串之间的文本。

    【讨论】:

    • 谢谢理查德。我正在使用组。让我试试你的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2016-09-04
    • 2011-07-12
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多