Javascript正则表达式难度,匹配一个名字的字符串

时间:2013-07-23 16:58:37

标签: javascript regex

我正在尝试将从服务器获取的名称与用户提供的输入相匹配,用户可能完全知道或不知道完整名称,例如我应该能够匹配以下内容:

  

获得的名字:Manuel Barrios Pineda
  给出的输入:Manuel P

到目前为止,我已尝试使用此代码:

var name_obtained = 'Manuel Barrios Pineda';
var re = new RegExp('\b[' + name_obtained + ']+\b');
var input_string = 'Manuel';

if (input_string.match(re)) {
    alert('Match');
} else {
    alert('No Match');
}

这是一个例子: jsfiddle example

编辑1: 需要匹配像'Manuel B','Manuel P'

这样的输入

2 个答案:

答案 0 :(得分:2)

var name_obtained = 'Manuel Barrios Pineda';
var re = new RegExp('\b[' + name_obtained + ']+\b');

那不行。您构建character class以匹配单词边界之间的单个字符。结果将等于

var re = /\b[adeilnoruBMP]\b/;
input_string.match(name_obtained)

name_obtained超过input_string时,这将永远不会奏效。请注意,match会尝试在{/ 1>} 中找到正则表达式,而不是相反。

因此我建议使用像

这样简单的东西
input_string

要使用var name_obtained = 'Manuel Barrios Pineda'; var input_string = 'Manuel'; if (name_obtained.indexOf(input_string) > -1) { alert('Match'); } else { alert('No Match'); } 作为正则表达式来搜索获取的名称,省略中间名或结束字符,您可以

input_string

答案 1 :(得分:1)

也许你想要这样的东西

var input_given = 'Manuel P'.replace(/[.+*()\[\]]/g, ' ').replace(/\?/g, '.'),
    name_obtained = 'Manuel Barrios Pineda',
    arr = input_given.split(' '), i, ret = true;

for (i = 0; i < arr.length && ret; ++i) // for each word A in input
    if (arr[i]) // skip ""
        ret = new RegExp('\\b' + arr[i]).test(name_obtained);
            // test for word starting A in name
// if test failed, end loop, else test next word

if (ret) alert('Match'); // all words from input in name
else alert('No Match');  // not all words found