Javascript:以逗号分隔的字符串搜索数字的最佳方式

时间:2018-02-28 19:22:40

标签: javascript string search numbers

我找不到答案。希望有人能够提供帮助。

我需要能够搜索“12”之类的数字,并且只能在逗号​​分隔的字符串上获得1,如:

var str = "1, 13, 112, 12, 1212, 555"

基本上,如果我有产品代码,并且我找到了12,我想返回一个单一的“自行车”,因为单“12”。但我得到的数字是112,1212等等。

任何想法我可以使用哪种功能或方法?

3 个答案:

答案 0 :(得分:1)

您可以拆分字符串然后Array.includes以检查数组中是否存在该值。

function check(str, val){
  return str.split(", ").includes(val+"");
}

var str = "1, 13, 112, 12, 1212, 555"

console.log(check(str, 12));
console.log(check(str, 121));
console.log(check(str, 1212));

答案 1 :(得分:0)

另一个可能的答案:

var twelve = /(^| )12(,|$)/;
var s = "1, 13, 112, 12, 1212, 555";
console.log(twelve.test(s)); // true

关于正则表达式

根据您的评论,让我帮您理解第一行。

/(^| )12(,|$)/是正则表达式。正则表达式是定义搜索模式的字符序列。这是嵌入在JavaScript中的功能之一,但它并不固有地与JavaScript相关联。换句话说,您不应该在JavaScript范围内学习正则表达式,但JavaScript仍然是在正则表达式上进行实验的好方法。话虽如此,/(^| )12(,|$)/意味着什么?

两个/是分隔符,表示表达式的边界。 /之间的区别在于表达式本身(^| )12(,|$),它描述了我们正在寻找的模式。我们可以将此表达式中涉及的各种字符分为两类:

  • 常规字符(12,),
  • 元字符(()|^$)。

常规字符是没有特殊含义的字符。例如:

/cat/.test("cat") // true
/cat/.test("concat") // true

元字符是具有特殊含义的字符:

  • ^表示“文字的开头”,
  • $表示“文字结尾”,
  • ()表示子表达式,
  • |表示逻辑OR。

示例1,空文本:

/^$/.test("") // true
/^$/.test("azerty") // false

示例2,完全匹配:

/^zert$/.test("zert") // true
/^zert$/.test("azerty") // false

示例3,备选方案:

/(az|qw)erty/.test("azerty") // true
/(az|qw)erty/.test("qwerty") // true

要结束,让我们回到/(^| )12(,|$)/

(^| )   start of the text or " "
12      then "12"
(,|$)   then "," or end of the text

因此,我们的模式与12* 1212,** 12,*等字符串匹配,其中*表示“零个或多个字符”。

最后一句话,在JavaScript中,您可以使用new关键字声明正则表达式:

var twelve = new RegExp("(^| )12(,|$)");

当您需要动态更改表达式的某些部分时,这非常有用:

function newNumberPattern (n) {
  return new RegExp("(^| )" + n + "(,|$)");
}

var eleven = newNumberPattern(11);
var twelve = newNumberPattern(12);

就是这样,我希望这很有启发性: - )

答案 2 :(得分:0)

我认为Google工作表不支持.includes()。但这似乎有效:

    /**
@customfunction
*/
function AK_CHECK(input){
    var split_cell = input.split(",").indexOf("12");
    if (split_cell > -1){
        return "Bicycle"
        } else {
        return "NO"}
        }