我正在尝试将属性语法与Javascript正则表达式进行匹配。有可靠的方法吗?我需要匹配如下的字符串 -
someobject.somekey.somechildkey.somegrandchildkey
我不需要路径成员,我只需要知道字符串是否包含路径。例如,给定一个像这样的字符串
This is some long string that contains a property.path.syntax, and I need to test it.
答案 0 :(得分:0)
试试这个:
/\b(?:\S+?\.)+\S+\b/g
这是由两个单词边界限定的,这在大多数情况下都适用(非单词字符旁边的单词字符)。然后我们懒洋洋地重复1+非空格字符,后跟.
(需要转义)。我们将\S
用于非空格,因为像@TJCrowder所说,属性可以contain many characters。在最后一段时间之后总是必须有另一组非空白字符。
答案 1 :(得分:0)
在评论中确定的限制范围内工作:
/(?:[a-zA-Z_$]+[\w$]*)(?:\.[a-zA-Z_$]+[\w$]*)+/g
Live Copy with details(g
标记,如果您需要重复此操作。)
那说:
a-z
,A-Z
,_
或$
开头的任何内容(强调再次这是一个不完整的列表)< / em>的.
或者,如果您需要 来匹配one.that
和should.not
:
blah one.that.1should.not blah
然后:
/(?:\s|^)((?:[a-zA-Z_$]+[\w$]*)(?:\.[a-zA-Z_$]+[\w$]*)+)(?:\s|$)/g
这与之前的说法相同,但加上:
(?:\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;