我正在做一个正则表达式,正在检查带有某些名称的条件。
const nameMatch = () => {
return ( !this.state.name.match("^Jen.*") || !this.state.name.endsWith("ez") );
}
在这种情况下,我将nameMatch
的值设为() => { return ( !this.state.name.match("^Jen.*") || this.state.name.endsWith("ez") ); }
而不是true
我正在做if(nameMatch){...}
但是我需要匹配的东西。
我在做什么错?
答案 0 :(得分:2)
正则表达式"^Jen.*"
的细分:
^
断言行的起始位置,其中行以\n
分隔。
Jen
是区分大小写的字符“ Jen”。
.*
匹配零到无限制时间之间的行终止符(\n
)之外的任何字符。
因此,据我了解您的问题,您正在询问如何查找和返回以“ Jen”开头或以“ ez”结尾的每个名称。
如果this.state.name
是名称的Array
,则可以使用以下示例返回不以“ Jen”开头或以“ ez”结尾的所有名称:
var names = ['menez', 'asJenas', 'benez', 'destruction', 'present', 'Jenosus', 'ezJen'];
const nameMatch = names.filter((word) => {
return !(word.startsWith("Jen") || word.endsWith("ez"));
});
console.log(nameMatch);
// expected output: Array ["asJenas", "destruction", "present", "ezJen"]
如果this.state.name
是一个String
,其中包含多个带有换行符(\n
)的名称,则可以首先从字符串中提取名称数组,然后使用上面的名称代码,例如:
var names = "menez\nasJenas\nbenez\ndestruction\npresent\nJenosus\nezJen"
const namesArray = names.split("\n");
const nameMatch = namesArray.filter((word) => {
return !(word.startsWith("Jen") || word.endsWith("ez"));
});
console.log(nameMatch);
// expected output: Array ["asJenas", "destruction", "present", "ezJen"]
如果this.state.name
是包含单个名称的String
,则可以使用以下函数,如果名称不是以“ Jen”开头或以“ ez”结尾,则该函数将返回true:
const nameMatch = (name) => {
return !(name.startsWith("Jen") || name.endsWith("ez"));
};
您可以像这样使用它:
const nameMatch = (name) => {
return !(name.startsWith("Jen") || name.endsWith("ez"));
};
var names = "Ben";
if (nameMatch(names)) {
console.log("This name matched");
}
// expected output: "This name matched"
请记住,在我使用names
的地方,您需要将其交换到this.state.name
。
答案 1 :(得分:0)
nameMatch
是一个函数,因此需要执行它才能获得结果,只需调用nameMatch()
而不是nameMatch
答案 2 :(得分:0)
您正在为const nameMatch分配一个函数。 这些类型的功能称为胖箭头功能。
如果要获取nameMatch
变量中的值,可以尝试:
const nameMatch = (!this.state.name.match("^Jen.*") || !this.state.name.endsWith("ez"))
一种简单的逻辑表达方式是:
const nameMatch = !(this.state.name.match("^Jen.*") && this.state.name.endsWith("ez"))