Javascript中的RegExp对象和String对象都有正则表达式匹配方法.
RegExp 对象有方法
String 对象有方法
该exec和match方法非常相似:
/word/.exec("words");
//Result: ["word"]
"words".match(/word/);
//Result: ["word"]
/word/.exec("No match");
//Result: null
"No match".match(/word/);
//Result: null
/word/g.exec("word word");
//Result: ["word"]
"word word".match(/word/g);
//Result: ["word", "word"]
Run Code Online (Sandbox Code Playgroud)
而test和search也非常相似:
/word/.test("words");
//Result: true
"words".search(/word/);
//Result: 0
//Which can converted to a boolean:
"word".search(/word/) > -1;
//Result: true
/word/.test("No match");
//Result: false
"No match".search(/word/) > -1;
//Result: false
Run Code Online (Sandbox Code Playgroud)
是否倾向于在RegExp对象或String对象上使用方法?
这主要是个人偏好,尽管功能略有不同(参见上一段的差异).除非你想开始对性能测量进行基准测试并将问题转化为性能测试,否则它主要是个人偏好.
我更喜欢这样做:
string.match(/word/)
Run Code Online (Sandbox Code Playgroud)
因为我认为这使得代码读起来像我的大脑一样考虑操作.我正在使用字符串对象并在其中查找特定的正则表达式.对我来说,在字符串中查找某些内容是字符串对象上的一种方法.这对我来说就像:
object.action(tool)
Run Code Online (Sandbox Code Playgroud)
在我看来,面向对象的代码应该如何工作.
如果你有:
/word/.match(string)
Run Code Online (Sandbox Code Playgroud)
然后对我来说感觉像:
tool.action(object)
Run Code Online (Sandbox Code Playgroud)
我发现它不那么合乎逻辑,也不那么面向对象.是的,/word/技术上也是一个对象,但它不是我试图操作的对象,我认为它更像是我正在使用的对象的工具或参数.
显然两者都有效.你可以自己决定自己喜欢什么.
我认为你只能对正则表达式对象做一些事情.例如,如果要匹配正则表达式的所有匹配项,则必须创建正则表达式对象,将"g"选项传递给它,然后re.exec()多次调用以获取每个匹配项,直到exec返回null表示不再匹配.我认为你不能这样做string.match().
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |