我有一个输入,有人可能会输入以下模式:
属性:值
该模式可能演变为具有一些差异的相同模式的多个实例。例如
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,'');
}
答案 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"