javascript 如何匹配整个单词但在一定长度限制内

javascript how match whole words but in certain length limit

例如我有这两个字符串:

字符串 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" 因为字数较少怎么办..

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

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,因此此 "limit" 可以是动态的。

希望对您有所帮助!

如果你想得到包含最少数量的同时也匹配你的正则表达式的字符串,你可以split并使用空格作为分隔符并检查返回数组的长度。

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

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

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);
<script src="https://unpkg.com/xregexp/xregexp-all.js"></script>