当我写一个正则表达式,如:
var m = /(s+).*?(l)[^l]*?(o+)/.exec("this is hello to you");
console.log(m);
Run Code Online (Sandbox Code Playgroud)
我得到一个包含以下内容的匹配对象:
{
0: "s is hello",
1: "s",
2: "l",
3: "o",
index: 3,
input: "this is hello to you"
}
Run Code Online (Sandbox Code Playgroud)
我知道整个比赛的索引来自该index属性,但我还需要知道匹配的组的开始和结束.使用简单的搜索将无法正常工作.在这个例子中,它将找到第一个'l'而不是在组中找到的那个.
有没有办法获得匹配组的偏移量?
我需要在pre-element中设置一些文本样式.为此,我使用这样的内联span-element:
<pre>
some text <span style="background-color:#ddd;">and some text
with a different background</span> and some more text
</pre>
Run Code Online (Sandbox Code Playgroud)
然后渲染html,仅在文本下方更改span-elements背景.
是否有可能使背景颜色延伸到整个线条而不将显示更改为块或内联块.
或者有没有办法用javascript实现这一目标?
节点处理事件如何?一个当时,还是并发?
我需要知道,如果要同时访问共享数组,如下例所示:
var ws = require("./ws.js"),
connections = [];
ws.createServer(function( socket ){
// add to connection array
socket.on('connect', function(){
connections.push(socket);
});
// remove from connection array
socket.on('close', function(){
var i = connections.indexOf(socket);
connections.splice(i,1);
});
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)
当客户端连接时,其套接字被推送到数组.当连接关闭时,我想从连接数组中删除它.
但是,在其他语言中,这可能会导致并发问题.
FX.如果两个连接同时关闭:
这会是一个问题,还是我可以假设一次只处理一个回调?
我有一个像以下简化示例的RegExp:
var exp = /he|hell/;
Run Code Online (Sandbox Code Playgroud)
当我在一个字符串上运行它时,它会给我第一个匹配,fx:
var str = "hello world";
var match = exp.exec(str);
// match contains ["he"];
Run Code Online (Sandbox Code Playgroud)
我想要第一个和最长的匹配,并且我的意思是按索引排序,然后是长度.
由于表达式是从一个RegExp数组合起来的,我正在寻找一种方法来找到最长的匹配,而不必重写正则表达式.
这甚至可能吗?
如果不是,我正在寻找一种方法来轻松分析表达式,并按正确的顺序排列.但我无法弄清楚,因为表达式可能会复杂得多,fx:
var exp = /h..|hel*/
Run Code Online (Sandbox Code Playgroud) 我在JavaScript中编写一个简单的语法高亮显示器,我需要找到一种方法同时测试多个正则表达式.
我们的想法是找出哪个是第一个,所以我可以确定要查找的新表达式集.
表达式可能类似于:
/<%@/,/<%--/,/<!--/和/<[a-z:-]/
首先,我尝试了一种策略,我将这些表达式组合在一起,如:
/(<%@)|(<%--)|(<!--)|(<[a-z:-])/
这样我就可以找出哪个匹配的组没有未定义.但问题是,当某些子表达式包含组或反向引用时.
所以我的问题是:
有没有人知道一个好的和合理的方式寻找与字符串中的多个正则表达式匹配?
我一直在玩Scala解析器组合器已经有一段时间了,并且学习了一些方法来使它表现得很好并且使用内置函数完成我想要的大部分工作.
但是你如何制作嵌入式语言(如php或ruby的erb)?在嵌入真实代码之外,它要求不要忽略空格.
我设法创建一个简单的解析器,匹配所有文本,直到给定的正则表达式匹配,但我正在寻找一个更好,更漂亮的方法来做到这一点.可能有一些已定义的功能可以完成所需的工作.
测试语言解析文本,如:
now: [[ millis; ]]
and now: [[; millis; ]]
Run Code Online (Sandbox Code Playgroud)
并由以下代码生成:
package test
import scala.util.parsing.combinator.RegexParsers
import scala.util.matching.Regex
sealed abstract class Statement
case class Print(s: String) extends Statement
case class Millis() extends Statement
object SimpleLang extends RegexParsers {
def until(r: Regex): Parser[String] = new Parser[String]{
def apply(in: Input) = {
val source = in.source
val offset = in.offset
val start = offset
(r.findFirstMatchIn( source.subSequence(offset, source.length) )) match {
case Some(matched) =>
Success(source.subSequence(offset, offset + matched.start).toString, in.drop(matched.start))
case None …Run Code Online (Sandbox Code Playgroud)