2015-03-19 119 views
1

我有一个网址,这些可能的文件夹名称:返回true

firstname+lastname 
firstname-lastname 
firstname lastname 
Firstname+Lastname 

我需要一种方法来捕捉这些,常见的元素将名字和姓氏(所以我不不关心+或空间),但我确实需要将它们转换为toLowerCase();

这可以用正则表达式来完成吗? (我在使用正则表达式时并不特别复杂,我可以使用基本的match()函数。

我的另一个想法是将这些变体存储在一个数组中,并且如果任何项目匹配其中一个数组项。

我一直在寻找这样的解决方案:http://snook.ca/archives/javascript/testing_for_a_v

在这种情况下,虽然我认为我的数组和声明将是这个样子:

var strArray = ['firstname','lastname']; 
strArray.toLowerCase(); 
var href = document.location.href; 
var secondaryDir = href.split("/")[4]; 

if (secondaryDir in strArray){ 
    console.log('Its true!'); 
    // do magic here 
} 

不知道是否有更好的方法来测试这个?

(我用jquery标记了这个问题,因为这是我正在使用的,尽管我认为这里的所有代码都是vanilla js)。

编辑

其实我并不需要担心转换阵列,以降低情况下,我能做到这一点对secondaryDir变量(我认为)。

+1

只需注意:您不能在JavaScript中使用正则表达式将您的输入变为小写或大写。 – 2015-03-19 11:47:24

回答

1

以下将是一个正则表达式的解决这个问题:

var pattern = '/([a-zA-Z]*)[\+\- ]([a-zA-Z]*)/'; 
var matches = pattern.exec(text); 

随着text是含有名字和姓氏的字符串。 matches[1]应该包含名字,并且matches[2]姓氏。

什么正则表达式做之前+-是匹配的每一个字母,以及每一个信如下匹配。

+0

谢谢我从来没有使用过exec,但我会试试这个。 – lharby 2015-03-19 12:24:12

+0

是否有可能把它放在小提琴中?我似乎无法得到它的工作。如果我可以在控制台中看到匹配[0]和匹配[1],它可能会有帮助,但我会继续尝试当然:) – lharby 2015-03-19 15:52:00

+0

我从模式中删除了引号,现在至少我在控制台中得到了一些东西:var pattern = /([a-zA-Z] *)[\ + \ - ]([a-zA-Z] *)/; – lharby 2015-03-19 16:17:53