Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用RegExp获取一系列单词,这些单词前后可能有空格,也可能没有空格_Javascript_Regex - Fatal编程技术网

Javascript 使用RegExp获取一系列单词,这些单词前后可能有空格,也可能没有空格

Javascript 使用RegExp获取一系列单词,这些单词前后可能有空格,也可能没有空格,javascript,regex,Javascript,Regex,我试图在冒号(:)字符后匹配一系列文本,而忽略前后的空白字符 范例 someWord: a series of text -or- someWord: a series of text 我希望得到“一系列文本”的结果,忽略冒号后面的任何空格,但包括文本短语中的空格 我试图为这个问题设计regexp的尝试失败了,希望SO社区能够提供帮助 这是我的坏regexp(我为您即将看到的内容提前道歉): 如果您只有一个匹配项(不是字符串中的几个;请参阅我的问题),那么我认为您正在寻找 :

我试图在冒号(:)字符后匹配一系列文本,而忽略前后的空白字符

范例

someWord: a series of text
-or-
someWord:        a series of text  
我希望得到“一系列文本”的结果,忽略冒号后面的任何空格,但包括文本短语中的空格

我试图为这个问题设计regexp的尝试失败了,希望SO社区能够提供帮助

这是我的坏regexp(我为您即将看到的内容提前道歉):


如果您只有一个匹配项(不是字符串中的几个;请参阅我的问题),那么我认为您正在寻找

:\s*(.*?)\s*$
  • 匹配冒号
  • \s*
    匹配零个或多个空格字符(贪婪)
  • (…)
    是目标文本的捕获组
  • *?
    是对任何字符序列的非贪婪捕获
  • \s*$
    是对空白的贪婪捕获
var s1=“someWord:一系列文本”;
var match=/:\s*(.*?\s*$/.exec(s1);
日志(“输入:“+s1+””);
日志(“结果:“+匹配[1]+””);
函数日志(msg){
var p=document.createElement('pre');
p、 附肢儿童(
document.createTextNode(msg)
);
文件.正文.附件(p);

}
如果您只有一个匹配项(字符串中没有几个;请参阅我的问题),那么我认为您正在寻找

:\s*(.*?)\s*$
  • 匹配冒号
  • \s*
    匹配零个或多个空格字符(贪婪)
  • (…)
    是目标文本的捕获组
  • *?
    是对任何字符序列的非贪婪捕获
  • \s*$
    是对空白的贪婪捕获
var s1=“someWord:一系列文本”;
var match=/:\s*(.*?\s*$/.exec(s1);
日志(“输入:“+s1+””);
日志(“结果:“+匹配[1]+””);
函数日志(msg){
var p=document.createElement('pre');
p、 附肢儿童(
document.createTextNode(msg)
);
文件.正文.附件(p);
}
要获取文本,可以使用引用捕获组的第一个索引,对于字符串末尾的空格,可以使用trim()

要获取文本,可以使用引用捕获组的第一个索引,对于字符串末尾的空格,可以使用trim()


对于这种特殊情况,您可以使用:

document.write(“someWord:一系列文本”).split(“:”)[1].trim();
document.write(“
”);//只需插入一行新行即可进行打印
document.write(“someWord:一系列文本”).split(“:”)[1].trim()对于这种特殊情况,您可以使用:

document.write(“someWord:一系列文本”).split(“:”)[1].trim();
document.write(“
”);//只需插入一行新行即可进行打印
document.write(“someWord:一系列文本”).split(“:”)[1].trim()只需将其与
:(.*)匹配,然后进行修剪。或者,在冒号上拆分,得到最后一个元素并进行修剪。是的,一切都取决于这一系列文本的内容。您可以使用
\:\s*(.*)$
然后从匹配中获取索引为1的组只需将其与
:(.*)匹配,然后进行修剪。或者,在冒号上拆分并获取最后一个元素并进行修剪。是的,一切都取决于这一系列文本的内容。您可以使用
\:\s*(.*)$
,然后从匹配中获取索引为1的组想象如果输入字符串没有换行符且长度为几兆字节,会发生什么情况。延迟匹配很可能会导致超时问题。@WiktorStribiżew:总是可以想象各种事情。既然问题中没有任何东西表明这一点,那就是不相关的推测。我只想指出,这种方法在JavaScript中效率低下。@WiktorStribiżew:首先,我不会盲目接受你的前提。但更重要的是,早熟优化恰恰是:早熟。刚刚尝试过:在目标文本位于第一个~5MB之后的~20MB字符串上,在我的Core i5 3.3GHz机器上,花了129ms对V8 in节点进行匹配(结果匹配字符串为~15MB)。(我多大年纪了,我第一次写了MHz,不得不退格?!)想象一下,如果输入字符串没有换行符,并且有几兆字节长,会发生什么。延迟匹配很可能会导致超时问题。@WiktorStribiżew:总是可以想象各种事情。既然问题中没有任何东西表明这一点,那就是不相关的推测。我只想指出,这种方法在JavaScript中效率低下。@WiktorStribiżew:首先,我不会盲目接受你的前提。但更重要的是,早熟优化恰恰是:早熟。刚刚尝试过:在目标文本位于第一个~5MB之后的~20MB字符串上,在我的Core i5 3.3GHz机器上,花了129ms对V8 in节点进行匹配(结果匹配字符串为~15MB)。(我多大了,第一次写了MHz,不得不退格?!)
> "someWord: a series of text".match(/:\s*(.*)$/)
[": a series of text", "a series of text"]
> "someWord:        a series of text  ".match(/:\s*(.*)$/)[1].trim()
"a series of text"