属性路径的正则表达式

时间:2014-06-09 17:11:39

标签: javascript regex

我正在尝试将属性语法与Javascript正则表达式进行匹配。有可靠的方法吗?我需要匹配如下的字符串 -

someobject.somekey.somechildkey.somegrandchildkey

我不需要路径成员,我只需要知道字符串是否包含路径。例如,给定一个像这样的字符串

This is some long string that contains a property.path.syntax, and I need to test it.

3 个答案:

答案 0 :(得分:0)

试试这个:

/\b(?:\S+?\.)+\S+\b/g

Demo


这是由两个单词边界限定的,这在大多数情况下都适用(非单词字符旁边的单词字符)。然后我们懒洋洋地重复1+非空格字符,后跟.(需要转义)。我们将\S用于非空格,因为像@TJCrowder所说,属性可以contain many characters。在最后一段时间之后总是必须有另一组非空白字符。

答案 1 :(得分:0)

在评论中确定的限制范围内工作:

/(?:[a-zA-Z_$]+[\w$]*)(?:\.[a-zA-Z_$]+[\w$]*)+/g

Live Copy with detailsg标记,如果您需要重复此操作。)

那说:

  • a-zA-Z_$ 开头的任何内容(强调再次这是一个不完整的列表)< / em>的
  • ...后跟任意数量的加号
  • 后跟一个或多个同一事物的非捕获组,但以.
  • 开头

或者,如果您需要 来匹配one.thatshould.not

blah one.that.1should.not blah

然后:

/(?:\s|^)((?:[a-zA-Z_$]+[\w$]*)(?:\.[a-zA-Z_$]+[\w$]*)+)(?:\s|$)/g

Live Copy

这与之前的说法相同,但加上:

  • 要求空格或输入开头以((?:\s|^))开头,最后输入空格或结尾((?:\s|$))。
  • 使用捕获组,这样您就可以只获取属性路径而不会在其两侧使用可选的空格

回顾一下,JavaScript标识符字符的有效列表非常大,远大于\w[a-zA-Z0-9_])。它不像某些语言只允许这些字符。允许所有排序正常到大数字的字符,例如ç,ö,ñ(和阿拉伯语,日语,中文和...)。并且对属性名称基本没有限制(例如,如果将它们作为字符串表示),只有属性名称文字。更多:http://ecma-international.org/ecma-262/5.1/#sec-7.6

答案 2 :(得分:-1)

var expr = /[a-zA-Z_]([a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*)+/i;
expr.test("your.test.case");

上面的正则表达式:

  • 不匹配.test
  • 不匹配test.
  • 不匹配test
  • 不匹配0test,因为它不能是Javascript属性(您无法使用数字启动变量的名称)

编辑:正如Paulchenkiller所建议的那样,并且考虑到最后的i代表&#34;不区分大小写&#34;,您也可以使用以下简短形式:

var expr = /[a-z_](\w*\.[a-z_]\w*)+/i;