正则表达式在JavaScript和AngularJS中不匹配,有ng更改

Regular Expression not matching in JavaScript and AngularJS with ng-change

本文关键字:ng 更改 不匹配 JavaScript AngularJS 正则表达式      更新时间:2023-09-26

我试图在这个页面中获取我的路径变量,以在用户输入时更改空格和标点符号

<!doctype html>
<html lang="en-US" ng-app>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
    <title>ng-change</title>
    <link rel="stylesheet" type="text/css" href="mystyle.css" media="all"/>
    <script type="text/javascript" src="angular_1.0.7.js"></script>
</head>
    <body>
        <div class="browser" ng-controller="Browser">
            <!--Mock browser URL-->
            <div class="url">
                &larr; &rarr; &infin;
                <input type="text" value="edit/{{ path }}"/>
            </div>
            <!--Input field for the page, mock page-->
            <div class="page">
                <label for="update">
                    Update the URL:
                    <input ng-change="clean()" ng-model="path"/>
                </label>
            </div>
        </div>
        <script type="text/javascript" src="script.js"></script>
    </body>
</html>

然而,当我输入任何内容时,都不会发生任何事情。这是script.js文件:

var Browser = function ($scope) {
    $scope.clean = function () {
        $scope.path = $scope.path
                        .replace("/'s+/g", "-")
                        .replace("/[^a-z0-9-]/i", "");
        console.log($scope.path);
    };
};

我很确定我的javaScript做对了,但我不知道为什么我的应用程序不工作,我试着调试它,问题似乎是ng-change只认为它是一个变化,当放入空格以外的字符时,无论何时放入空格,它都会忽略它们。

您的"正则表达式"是字符串,而不是正则表达式对象。创建regex对象的两种方法是:

new RegExp("regex string", "flags")
// and
/regex stuff/flags

从代码.replace("/'s+/g", "-")中删除引号,使其成为.replace(/'s+/g, "-")

.replace()方法确实接受字符串(以及正则表达式),但尝试查找该确切文本的第一个出现,而不是在字符串中使用正则表达式。

参考文献:

  • 正则表达式-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
  • .replace()-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace