我开始在JavaScript中编写代码语法高亮显示,我想突出显示某种颜色的引号(“s和s”)中的文本。我需要它不能被搞砸了其中一种报价也在一对其他报价的中间,但我真的不知道从哪里开始。我不知道如何找到报价,然后找到正确的报价结束语。
答案 0 :(得分:1)
除非您正在为挑战做这件事,否则请查看Google Code Prettify。
对于您的问题,您可以阅读parsing (and lexers) at Wikipedia。这是一个很大的话题,你会发现你会遇到比解析字符串更大的问题。
首先,可以使用正则表达式(尽管它们很少具有真正词法分析器的准确性。)匹配字符串的典型正则表达式是:
/"(?:[^"\\]+|\\.)*"/
然后'
代替"
。
否则,对于逐个字符的解析器,一旦你点击"
,你就会设置某种状态,然后当你点击"
时就会出现这种状态通过不均匀的反斜杠量(偶数量的反斜杠会相互逃逸),你退出字符串。
答案 1 :(得分:1)
你可以使用正则表达式找到引号但是如果你正在写一个语法高亮显示器,那么唯一可靠的方法是逐个字符地逐步执行代码,并决定从那里做什么。
E.g。正则表达式
/("|')((?:\\\1|.)+?)\1/g
(匹配“this”和“this”和“thi \”s“)
答案 2 :(得分:0)
使用堆栈..如果发现不匹配的报价推它..如果匹配找到pop
答案 3 :(得分:0)
我使用向后引用在php中使用单个正则表达式来完成它。 JS不支持它,我认为如果你真的想检测未定义的反斜杠,那就是你需要的。