【发布时间】:2009-11-01 16:40:45
【问题描述】:
如何检查变量中是否包含某些内容?我尝试检查 .match() 是否返回 null 但这对于使用 OR 进行检查没有用?
【问题讨论】:
标签: javascript regex string match
如何检查变量中是否包含某些内容?我尝试检查 .match() 是否返回 null 但这对于使用 OR 进行检查没有用?
【问题讨论】:
标签: javascript regex string match
/cheese|cake/.test(a)
如果你想不区分大小写地测试,你可以在正则表达式的末尾添加一个i
【讨论】:
|,而且因为在这种情况下test(...) 比match(...) 更合适。
由于你只得到了涉及正则表达式的答案,这里是纯字符串操作的解决方案:
var hasMatch = input.indexOf('cheese') != -1 || input.indexOf('cake') != -1;
【讨论】:
试试这个:
var myString = 'I love cheese';
var isMatch = new RegExp(/(cheese|cake)/i).test(myString); //should return true
【讨论】:
i 标志使其不区分大小写,这取决于具体需要可能会或不需要。
到目前为止发布的所有表达式也将匹配“cheeseburger”和“cakewalk”。不知道这是否可取,以防万一以下版本不可用:
alert(/\b(cheese|cake)\b/i.test("cheese and cake")) // true
alert(/\b(cheese|cake)\b/i.test("cheeseburger and pancake")) // false
【讨论】:
您不只是想要以下内容吗?
var result = input.match("cheese") || input.match("cake");
【讨论】:
match,test 就足够了。 1) match 通过创建一个数组来保存匹配的字符串(如果成功)会降低性能; test 没有。 2) match 返回数组或 null,而不是布尔值(如 test 所做的那样),因此您可能仍需要对结果进行类型转换。 3)当单个正则表达式可以正常工作时,无需调用match 两次(如@Gyoshev 示例)。 /cake|cheese/.test(input) 更短、更简单、更高效。为什么要在这里使用match?
false 和非null 到true,所以没有问题。 3. 使用两个匹配可以说更具可读性。
test 的存在正是为了这些目的,而使用 match 只是使用了错误的工具来完成这项工作。我同意你关于双重匹配更具可读性的观点(尤其是对于不熟悉正则表达式的人)。
test 更合适,但我的解决方案仍然可行,所以我不认为它值得一票否决。
var matched = !!('cheese'.match(/(?:cheese|cake)/g));
alert(matched)
或 RegExp.prototype.test:
var matched = /cheese|cake/i.test('cheese cake');
alert(matched)
【讨论】: