gpt4 book ai didi

Javascript:我在这里如何滥用正则表达式构造函数?

转载 作者:行者123 更新时间:2023-12-02 19:28:33 24 4
gpt4 key购买 nike

_("test1: "+ ("slayers get more".match(RegExp("^" + "slayers get magic"), "g")));

我期待结果“slayers get m”,但我得到的是 null?

输入正则表达式文字确实有效。

另一个问题:如何让它仅匹配整个单词,以便结果为“slayers get”?

谢谢

最佳答案

"g" 应该是 RegExp() 的第二个参数,而不是 .match() 的第二个参数。 (尽管您的正则表达式以 ^ 开头,以便从字符串的开头进行匹配,但您根本不需要 "g"。)

此外,使用 new 会“更正确”,如下所示:

_("test1: "+ ("slayers get more".match(RegExp("^" + "slayers get magic", "g"))));

但是我相信在 RegExp() 的情况下,无论有没有 new,它都可以工作。

'I am expecting the result "slayers get m" but instead I get null?'

null 是该字符串和该正则表达式的正确结果,因为它不匹配。也就是说,正则表达式要么匹配,要么不匹配(在本例中不是),它不会返回部分匹配的字符串部分。

看来您真正想要做的是返回第一个字符串中与第二个字符串的开头匹配的部分,直到但不包括第一个不同的字符。如果是这样,请尝试以下操作:

function getCommon(s1,s2) {
var i = 0, len = s1.length;
while (i < len && s1.charAt(i) === s2.charAt(i))
i++;
return s1.substr(0,i);
}

_("test1: "+ getCommon("slayers get more", "slayers get magic"));

'Another question: How do I get it to match whole words only, so that the result would be "slayers get"?'

基于与我之前的函数相同的想法,一次只比较一个单词:

function getCommon(s1,s2) {
var a1 = s1.split(" "),
a2 = s2.split(" "),
len = a1.length,
i = 0;
while (i < len && a1[i] === a2[i])
i++;
return a1.slice(0,i).join(" ");
}

这会将两个字符串拆分为单独的单词,一次比较一个单词,直到出现不匹配为止,并返回直到该点匹配的单词(如果没有匹配,则返回空字符串)。

演示:http://jsfiddle.net/j8zsU/1/

关于Javascript:我在这里如何滥用正则表达式构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11770691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com