如何修改正则表达式以仅测试出现在字母数字字符之前的字符串中的字符?

时间:2019-03-25 04:20:00

标签: javascript regex

我正在尝试使用正则表达式测试作为文件路径的字符串,并且我希望正则表达式的测试在且仅当文件名前的字符(仅字母数字字符)为././../。我的问题是,如果路径包含诸如./../../之类的目录,则测试返回true,因为该目录以./开头。

我认为,如果仅对出现在所有字母数字字符之前的字符测试完全匹配,则可以消除此问题,但是我不知道该怎么做。

>

代码:

function validPath(path) {
   if (!/^(\.\/|\.\/\.\.\/)/.test(path)) {
      path = "ERROR" //the path is not valid if ERROR is returned
   }

   return path;      //the path is valid if the path is returned
}

我希望validPath('./../../index.html')的输出为ERROR,但输出为./../../index.html

1 个答案:

答案 0 :(得分:1)

如果您知道所有文件名都以ASCII字母,数字或下划线开头,则可以扩展正则表达式以表示 <!-- TIMER START --> <div class="timer-container"> <countdown #countdown [config]="{leftTime: 1800, notify: [ 1795 ]}" (finished)="finishTest()" (notify)="onNotify($event)">$!m!:$!s!</countdown> <button (click)="stopTimer()" class="btn btn-link btn-sm">STOP</button> <button (click)="store()" class="btn btn-link btn-sm">STORE</button> </div> <!-- TIMER END --> ./之后的下一个字符必须是的前导字符之一。文件名:

./../

这里if (!/^(\.\/|\.\/\.\.\/)\w/.test(path)) { 代表\w

如果您希望接受以点号或非ASCII字母开头的文件名,那么您将需要做更多的工作。

JavaScript regexes本身不处理非ASCII字母,但是您可以使用第三方regex引擎来处理。

另一种说法是

[A-Za-z0-9_]

,这意味着您不希望if (!/^(\.\/|\.\/\.\.\/)[^.]/.test(path)) { ./之后的第一个字符成为另一个点。这将处理具有非ASCII字母的文件名,但不会拾取以点开头的隐藏文件。

希望能使您更靠近!