【问题标题】:javascript how match whole words but in certain length limitjavascript如何匹配整个单词但在一定的长度限制
【发布时间】:2018-10-19 21:55:49
【问题描述】:

例如我有这两个字符串:

字符串1:

"hi sir may name is Jone"

字符串2

 "hi may name is Jone"

我有这个正则表达式:

     var regex = XRegExp('hi(?:(?!hi|Jone).)*?Jone', 'gs');

将匹配它们,但我想修改正则表达式以仅在整个字符串的有限长度内匹配

我想匹配两个“hi may name is Jone”的字符串,因为它的单词长度较少。如何做到这一点..

【问题讨论】:

  • hi\s+(?:\S+\s+){1,3}Jone 只允许在“hi”和“Jone”之间添加 1 到 3 个其他词。
  • 为什么在应用正则表达式之前不检查字符串的长度?

标签: javascript regex match string-length


【解决方案1】:

如果您想获得与您的正则表达式匹配的单词数量最少的字符串,您可以split 并使用空格作为分隔符并检查返回数组的长度。

以字符串数组为例,您可以创建var longestString = "";,它将在循环结束时包含最短匹配字符串。

在循环中,首先检查是否有match 以及longestString 是否为空字符串。如果是这种情况,请设置变量,以便您有一个匹配项来与未来可能的匹配项进行比较。

var strings = [
  "test",
  "hi sir may name is Jone",
  "hi may name is Jone",
  "hi Jone",
  "hi may name is Jone test",
  "hi i am Jone",
  "may name is Jone test",
  "hi may name is Jane test test 2"
];

var regex = /hi(?:(?!hi|Jone).)*?Jone/;
var longestString = "";

strings.forEach((str) => {
  var match = XRegExp.match(str, regex);
  if (match && longestString === "") {
    longestString = str;
    return;
  }
  if (match && str.split(" ").length < longestString.split(" ").length) {
    longestString = str;
  }
});
console.log(longestString);
&lt;script src="https://unpkg.com/xregexp/xregexp-all.js"&gt;&lt;/script&gt;

【讨论】:

    【解决方案2】:

    如果您想仅使用正则表达式匹配整个字符串的有限长度,我认为您可以这样做:

    var index = 15;
    
    
    var testString1 = "hi may name is Jone";
    var testString2 = "hi sir may name is Jone";
    
    testString1.match("^.{1," + index + "}Jone"); // This will match
    testString2.match("^.{1," + index + "}Jone"); // This string is longer and will not match
    

    正则表达式^.{1, n}Jone的解释。

    ^ : 应该匹配字符串的开头。

    .{1, n}Jone :匹配 1 到 n 之间的所有内容,直到模式完全匹配。

    在这种情况下,我们将n 定义为index,因此这个“限制”可以是动态的。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      相关资源
      最近更新 更多