在javascript字符串中搜索类似值

时间:2016-09-24 06:59:33

标签: javascript

我有一个看起来像这样的javascript脚本字符串

var name = "John Peter James";

现在我还有一个输入字段

<input type="text" id="searchForNames" />

假设用户在输入字段

中键入此值
var inputVal = "Pe Jame";

而“Pe”是“彼得”的开头而“Jame”也是“詹姆斯”的开头

我想搜索字符串name中的每个单词,如果它以输入值中的每个单词开头,就像这样

inputValue = "Pe Jame";  //returns true
inputValue = "Pes James"; // returns false
inputValue = "John"; //returns true
inputValue = "Joh Pete Ja"; //returns true
inputValue = "Jon Peter James"; // returns false
inputValue = "John John"//returns false

5 个答案:

答案 0 :(得分:0)

您将需要使用拆分方法来制作这些单独的部分

var myString = "pe jame";
var result = myString.split(" ");

spit中的参数是分隔符

function stringSplit() { 
    var name = "john peter james";
    var myString = "pe jame";
    var result = myString.split(" ");
    var nameSplit = name.split(" ");
    var isTrue = false;

    for (var q = 0; q < result.length; q++) {
        for (var i = 0; i < nameSplit.length; i++) {
            if (nameSplit[i].startsWith(result[q])) {
                isTrue = true;
                break;
            }
            else {
                isTrue = false;
            }
        }
    }
}

这不完美,但我确实认为它很接近,对于迟到的回复感到遗憾。这需要一些思考。

答案 1 :(得分:0)

只需写下您的意思,即输入的每个部分都是名称某些部分的前缀。

input.split(' ').every(isPrefixInName)

糟糕,现在我们必须写isPrefixInName。输入的一部分是name中的前缀(如果有) 一些字,其中输入的那部分开头。

function isInInput(inputPart) {
  return name.split(' ').some(namePart => namePart.startsWith(inputPart));
}

答案 2 :(得分:0)

使用此

newInputValue = inputValue.split(' ');
newName = name.split(' ');
for(var i = 0; i < newInputValue.length; i++){
    newValue = newInputValue[i];
    for(var x = 0; x < newName.length; x++){
        eachName = newName[x];
        if(eachName.startsWith(newValue))
            return true;
        else
            return false;
    }
}

答案 3 :(得分:0)

您也可以使用正则表达式。这将有助于您忽略区分大小写

var arr = ["Pe Jame", "Pes James", "John", "Joh Pete Ja", "Jon Peter James", "John John"];

function searchValues() {
  var search = document.getElementById('txtSearch').value;
  var r = new RegExp(search.replace(/ /g, '|'), 'i');
  document.getElementById('result').innerHTML = JSON.stringify(arr.filter(x => r.test(x)), null, 4)
}
<input type="text" id="txtSearch" />
<button onclick="searchValues()">Search</button>
<pre id="result"></pre>

答案 4 :(得分:0)

正如其他人所说,我们可以使用RegExp实现这一目标。

JSBin here

简单正则表达式为/^your input here.*/