Skip to content

字符串和正则表达式优化 #20

Description

@chengfengliu

字符串合并的四种方法
1.The + operator
2.The += operator
3.array.join()
4.string.concat()

+和+=最好。

正则表达式回溯
当正则表达式扫描目标字符串时,它从左到右逐个测试其组成部分,看是否能找到匹配项。对每一个量词和分支都必须决定接下来如何处理。如果遇到量词(诸如*,+?或{2,}),正则表达式必须决定何时尝试匹配更多的字符,如果遇到分支时(来自 | 操作符),必须从可能的选项中选一个做尝试。

提高正则表达式效率的方法
1.关注如何让匹配更快失败;
如果你使用正则表达式来匹配一个大字符串的一小部分,该正则表达式匹配失败的位置比匹配成功的位置要多得多。
2.正则表达式以简单、必须的字元开始;
好的起始标记通常是一个锚(^或$)、特定字符串(比如:x或\u263A)、字符类(比如:[a-z]或类似\d的速记符)和单词边界(\b)。
3.使用量词模式,使它们后面的字元互斥;
4.减少分支数量,缩小分支范围;
5.使用非捕获组;
6.只捕获感兴趣的文本以减少后处理;
7.暴露必须的字元;
8.使用合适的量词;
9.把正则表达式赋值给变量并重用它们;
10.将复杂的正则表达式拆分为简单的片段(化繁为简)。

何时不使用正则表达式
你事先知道字符串的哪一部分将要被测试时。
比如,如果你要检查一个字符串是否以分号结尾。
可用charAt方法来读取特定位置上的字符。字符串方法slice、substr以及substring都可用在特定位置上提取并检查字符串的值。此外,indexOf和lastIndexOf方法非常适合查找特定字符串的位置,或者判断它们是否存在。

创建正则表达式
一是使用RegExp构造函数构造一个正则表达式对象;
var rel1 = new RegExp("abc");
二是使用斜杠(/)字符将模式包围起来,生成一个字面值。
var re2 = /abc/;
\d 任意数字符号 digit
\w 字母和数字符号(单词符号)word
\s 任意空白符号 space
\D 非数字符号
. 除了换行符以外的任意符号
\b 单词边界 boundary
/[abc]/:a、b和c中任何一个字符
+一次或多次,*零次或多次,?零次或一次
/x{2,4}/:出现次数在两个数字范围之间
/(abc)/:元组,括号内为一个整体

方法:
text方法接收用户传递的字符串,并返回一个布尔值,表示字符串中是否包含能与表达式模式匹配的字符串(不是一模一样)。
exec方法返回一个表示匹配字符串信息的对象。对象看起来像(而且实际上就是)一个字符串数组,其首元素是与模式匹配的字符串。若正则表达式包含使用圆括号包围的子表达式分组,与这些分组匹配的文本也会出现在数组中。第一个元素是与整个模式匹配的字符串,其后是与第一个分组匹配的部分字符串,然后是第二个分组。(这方法用于分组)
var quotedText = /'([^']*)'/; conlose.log(quotedText.exec("she said 'hello'")); //["'hello'","hello"]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions