【问题标题】:Javascript / jQuery Invert regex programmaticallyJavascript / jQuery 以编程方式反转正则表达式
【发布时间】:2019-06-03 16:19:40
【问题描述】:

我想自动删除与输入中的模式不匹配的所有字符。我首先使用“^”进行了尝试(例如:“[a-z]{2,2}”将转换为“[^a-z]*”),但这仅适用于某些输入。

这是我的代码:

$("input:not([ignore-pattern-check])[pattern]").on("input", function(){
                let val = $(this).val();

                if (val.length >= 1){
                    var regex = $(this).attr("pattern");

                    if (regex.charAt(0) == "^"){
                        regex = regex.substr(1, regex.length);
                    }

                    if (regex.charAt(regex.length - 1) == "$"){
                        regex = regex.substr(0, regex.length - 1);
                    }

                    regex = regex.replace(/\{(.+?)\}/, "*");

                    regex = "^(?!.*(" + regex + "))$";

                    let reg = new RegExp(regex);

                    if (reg.test(val)){
                        alert("This char isn't allowed!");
                    } else {
                        _hide_message();
                    }

                    $(this).val(val.replace(reg, ""));
                }
            });

编辑 例子: 我有一个pattern="^[a-z]*$" 的输入。当我现在键入一个“A”(区分大小写)时,这个“A”应该会自动从值中删除。当我键入“a”时,它不应该被删除。

【问题讨论】:

  • 试试这样:$(this).val(val.split(/your_pattern/).join("")) 而不是整个if 块。
  • 不起作用。我将其更改为:$(this).val(val.split(/$(this).attr("pattern")/).join("")).
  • 我建议在 .split 中使用 regex 模式,而不是在分隔符中使用一些代码。 $(this).val(val.split($(this).attr("pattern")).join("")) 如果 $(this).attr("pattern")RegExp 对象。如果$(this).attr("pattern") 不是RegExp 对象,请使用new RegExp($(this).attr("pattern"))
  • 模式^[a-z]$表示1个小写字母,所以AB是无效的,如果你把它反过来你应该可以输入AB不是吗?
  • 我希望你能用更简单的术语来解释它。试图将大型正则表达式信息保留在我的脑海中,然后不得不破译你的意思,这有点太过分了。

标签: javascript jquery regex


【解决方案1】:

您可以尝试下面的代码 - 使用上面评论中的解决方案。

const update = () => {
  const regex = document.getElementById("regex").value;
  const input = document.getElementById("input").value;
  const result = input.match(new RegExp(regex, 'g')).join('X');
  console.log("result", result);
  document.getElementById("output").innerHTML = result;
}
<label for="regex">Regex</label><input name="regex" id="regex" type="text" value="[a-z ]+"><br>
<label for="input">Input</label><input name="input" id="input" type="text" value="only Small Letters allowed, no _ underscores etc:)"><br>
<button onclick="update()">Run</button>
<br>
<div id="output"></div>

【讨论】:

  • 我觉得我表达的不是很好,所以我做了一个编辑。这对我不起作用。对不起。
  • 做了一个小更新 - 不知道它是否有所作为
猜你喜欢
  • 2011-12-04
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 2016-04-02
  • 2011-10-02
相关资源
最近更新 更多