【问题标题】:JavaScript RegExp exec functionJavaScript 正则表达式执行函数
【发布时间】:2016-06-01 01:35:57
【问题描述】:

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

属性:值

该模式可能会演变成同一模式的多个实例,但存在一些差异。例如

property:value property2:"value2" property3>"value3" -property4:"value4"

因此,在上面的示例中,每个模式都可以以文字字符 '-' 开头,但并非必须如此,每个模式都可以包含 :>

属性:值属性2

这是我最初使用的正则表达式,我尽力调整它,但最终掉进了几个兔子洞。我试图告诉它匹配到一个特定的字符类,但结果很糟糕。

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,'');
}

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    你能用这些字符作为分隔符分割字符串吗: - : \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" 
    

    【讨论】:

      猜你喜欢
      • 2014-07-13
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      相关资源
      最近更新 更多