JavaScript RegExp exec函数

时间:2016-02-19 13:01:30

标签: javascript regex

我有一个输入,有人可能会输入以下模式:

  

属性:值

该模式可能演变为具有一些差异的相同模式的多个实例。例如

  

property:value property2:“value2”property3>“value3”-property4:“value4”

因此,在上面的示例中,每个模式都可以以文字字符“ - ”开头,但不一定,每个模式都可以包含以下文字字符:><另外,每个模式的值可以用双引号引用,也可以不引用。我发现的是,我之前尝试创建一个新的RegExp然后在一个值上使用exec函数并没有减少我想要的匹配,所以使用上面的例子,它将匹配:

  

property:value property2

这是我最初使用的RegExp,我尽力调整,但最终落下了几个兔子洞。我试图告诉它在特定的角色类之前匹配,但效果不好。

var findFilters = new RegExp(/-?\w+[:<>]"?[A-Za-z\S\s]+"?/ig)

此外,这是我之后在我的功能中使用的内容。我正在接受每个匹配并将其作为参数传递给另一个函数。 searchTerm表示用户可以键入的输入值。

var match;
while(match = findFilters.exec(searchTerm)){
    var currentFilter = match[0];
    HSAddFilterParameter(currentFilter);
    updatedTerm = searchTerm.replace(currentFilter,'');
}

1 个答案:

答案 0 :(得分:0)

您可以将字符串拆分为这些字符作为分隔符: - :&lt; &GT; \ s? 然后一次从阵列中抓取它们。这是一个例子:

<!DOCTYPE html>
<html>
<body>
<p id="answer"></p>
    <script>
        var foo = 'property:value  property2:"value2"  property3>"value3"  -property4:"value4"';

        arr =  foo.split(/[-:<>\s]+/);
        str = "";
        for (i = 0; i < arr.length; i+=2) { 
            str = str + arr[i] + " : " + arr[i+1] + " <br>";
        }
        document.getElementById("answer").innerHTML = str;
    </script>
</body>
</html>

输出:

property : value 
property2 : "value2" 
property3 : "value3" 
property4 : "value4" 
相关问题