【问题标题】:Javascript string reg expressionJavascript字符串正则表达式
【发布时间】:2020-07-04 15:35:50
【问题描述】:

这是我的字符串:

[FULL-TIME] Bytovia Bytow 0:0 Skra Czestochowa

我想从两点获取文本,所以我的结果是:

Bytovia Bytow

我试过了

  var str = "[FULL-TIME] Bytovia Bytow 0:0 Skra Czestochowa"; 
  var res = str.replace("[FULL-TIME]", "");
  var res2 = res.match(/\w+ /);
  //but log is Bytovia and not Bytovia Bytow

【问题讨论】:

  • 您可以添加另一个 str.replace 以删除 'Bytow' 之后的文本。不太确定为什么要使用正则表达式。
  • 因为我将 Bytovia Bytow 与另一个 Bytovia Bytow 进行比较。如果我在一天内只比较 Bytovia 或 BytoviaBytow,那么可能还有 Bytovia Bytow Women,而且因为我使用的是 api json

标签: javascript string replace char match


【解决方案1】:

我认为如果您根本不使用正则表达式,这会容易得多。您可以拆分字符串并以这种方式获取单词。例如:

var str = "[FULL-TIME] Bytovia Bytow 0:0 Skra Czestochowa";
var sp = str.split(" ");
var firstWord = sp[1];
var secondWord = sp[2];

当然,这是假设您使用的所有字符串,只有两个词要提取(例如 Bytovia Bytow)。

既然您问如何使用 regex 来做到这一点,我认为这可以解决问题:

var str = "[FULL-TIME] Bytovia Bytow 0:0 Skra Czestochowa"; 
var res = str.replace("[FULL-TIME]", "");
var res2 = res.match(/.*(?= [0-9]*:)/);

说明:

.* - 匹配任何字符

(?= [0-9]*:) - 它将向前搜索并搜索一个空格,后跟零个或多个数字,然后是冒号。

因此,即使您需要匹配多个单词,而不仅仅是两个,也应该找到所有单词。

【讨论】:

  • 太完美了!但现在我也想得到第二个团队Skra Czestochowa。我试过这个res.match(/:\w+.*(?=)/),结果是:0 Skra Czestochowa。我做错了什么?
  • 你需要lookbehind而不是lookahead regex。所以要得到字符串,你应该写res.match(/((?<=:[0-9] |:[0-9][0-9] ).*/)。当涉及到lookbehind 时,您无法匹配具有可变长度的字符串。这就是为什么我有一个:[0-9] ,它将查找冒号,后跟一个数字和一个空格,或者一个冒号,然后是两个数字,后跟一个空格。这应该会给你你需要的结果。此外,如果所有字符串都是这种格式,那么与(?<=[0-9] ) 匹配会更容易。只需跳过一个数字后跟一个空格,然后获取所有内容
【解决方案2】:

如何将您的正则表达式更改为类似的内容。

var res2 = res.match(/([a-zA-Z ]+){2}/);

【讨论】:

    【解决方案3】:

    试试这个:

    var str = "[FULL-TIME] Bytovia Bytow 0:0 Skra Czestochowa"; 
    var res = str.replace("[FULL-TIME]", "");
    
    // Modified Statement
    var res2 = res.match(/\w+\s\w+/);
    

    为了进一步探索,你可以试试这个:

    【讨论】:

      【解决方案4】:

      如果我理解正确的话,你需要得到左边球队的名字。这是一个单行:

      const res = str.match(new RegExp('(?:\\[FULL-TIME\\] )([a-z ]+)', 'i'))[1].trim();
      

      这里(?:\\[FULL-TIME\\] ) - 不是捕获组。匹配不会,组用于可读性,如果你愿意,你可以这样省略:

      const res = str.match(new RegExp('\\[FULL-TIME\\] ([a-z ]+)', 'i'))[1].trim();
      

      然后([a-z ]+) 将匹配一个或多个a-z 字符或空格符号,不区分大小写(注意'i' 标志作为RegExp 构造函数的第二个参数)。这是一个捕获组,它将转到String.prototype.match 返回的数组的[1] 索引。

      故事的其余部分很简单 - 我们获取值索引 [1] 并修剪它以去除任何尾随或前面的空格。

      UPD:至于第二队,你需要另一个捕获组:

      const str = "[FULL-TIME] Bytovia Bytow 0:0 Skra Czestochowa";
      const match = str.match(new RegExp('(?:\\[FULL-TIME\\] )([a-z ]+)\\d+:\\d+([a-z ]+)', 'i'))
      const team1 = match[1].trim(); // => Bytovia Bytow 
      const team2 = match[2].trim(); // => Skra Czestochow
      

      【讨论】:

        猜你喜欢
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-21
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多