0

我试图在此页面中获取我的路径变量,以在用户输入时更改空格和标点符号。这是相应的代码:

<!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是只考虑在放置除空格以外的字符时它会发生变化在中,只要输入空格,它就会忽略它们。

4

1 回答 1

3

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

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

从您的代码中删除引号,.replace("/\s+/g", "-")使它们变为.replace(/\s+/g, "-").

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

参考:

于 2013-08-06T16:57:46.750 回答