正则表达式匹配与冒号连接的单词对

时间:2010-03-03 11:02:42

标签: regex

我根本不懂正则表达式。任何人都可以用一个非常简单的正则表达式帮助我,

从句子中提取“ word:word ”。例如“Java教程格式:Pdf 位置:东京 Javascript”?

  • 很少修改: 第一个'单词'来自列表,但第二个是任何东西。 “[ABC,FGR,HTY]中的word1”
  • 家伙的情况要求多一点 修改。 匹配形式可以是“word11:word12 word13 ..”,直到下一个“word21:...”。
事情变得越来越复杂了......我必须学习reg ex :(

提前感谢。

7 个答案:

答案 0 :(得分:7)

您可以使用正则表达式:

\w+:\w+

说明:
\w - 单个字母,可以是字母(大写或小写),数字或_ \w+ - 以上一个或多个char ...基本上是一个单词

所以\w+:\w+ 将匹配由冒号分隔的一对单词。

答案 1 :(得分:2)

试试\b(\S+?):(\S+?)\b。第1组将捕获“格式”和第2组“Pdf”。

一个工作示例:

<html>
<head>
<script type="text/javascript">
function test() {
    var re = /\b(\S+?):(\S+?)\b/g; // without 'g' matches only the first
    var text = "Java Tutorial Format:Pdf With Location:Tokyo  Javascript";

    var match = null;
    while ( (match = re.exec(text)) != null) {
        alert(match[1] + " -- " + match[2]);
    }

}
</script>
</head>
<body onload="test();">

</body>
</html>

正则表达式的一个很好的参考是https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/RegExp

答案 2 :(得分:1)

使用此代码段:

 
$str=" this is pavun:kumar hello world bk:systesm" ;
if ( preg_match_all  ( '/(\w+\:\w+)/',$str ,$val ) )
 {
 print_r ( $val ) ;
 }
 else
 {
 print "Not matched \n";
 }

答案 3 :(得分:1)

根据您的额外要求继续执行Jaú的职能:

function test() {
    var words = ['Format', 'Location', 'Size'],
            text = "Java Tutorial Format:Pdf With Location:Tokyo Language:Javascript", 
            match = null;
    var re = new RegExp( '(' + words.join('|') + '):(\\w+)', 'g');
    while ( (match = re.exec(text)) != null) {
        alert(match[1] + " = " + match[2]);
    }
}

答案 4 :(得分:0)

我目前正在我的nodejs应用程序中解决这个问题,并发现这是,我猜,适合结肠配对的措辞:

<script>

   x = 0;   
  $(function() {
      $(".icon-menu").click(function(){
         $("nav").toggle();
      });


     $(".container").scroll(function(){
        $(".menu_txt").text( x+= 1);
        if (x > 30) {
           $("nav").hide();
         }
      });

  });

</script>

它也匹配报价值。比如([\w]+:)("(([^"])*)"|'(([^'])*)'|(([^\s])*))

es6中的示例编码:

a:"b" c:'d e' f:g

PHP编码示例

const regex = /([\w]+:)("(([^"])*)"|'(([^'])*)'|(([^\s])*))/g;
const str = `category:"live casino" gsp:S1aik-UBnl aa:"b" c:'d e' f:g`;
let m;

while ((m = regex.exec(str)) !== null) {
   // This is necessary to avoid infinite loops with zero-width matches
   if (m.index === regex.lastIndex) {
      regex.lastIndex++;
   }

   // The result can be accessed through the `m`-variable.
   m.forEach((match, groupIndex) => {
      console.log(`Found match, group ${groupIndex}: ${match}`);
   });
}

您可以使用以下在线工具检查/测试您的正则表达式:https://regex101.com

顺便说一句,如果没有被regex101.com删除,您可以浏览该示例编码here

答案 5 :(得分:-1)

这是非正则表达方式,用你最喜欢的语言,在白色空格上分割,遍历元素,检查“:”,如果找到则打印它们。例如Python

>>> s="Java Tutorial Format:Pdf With Location:Tokyo Javascript"
>>> for i in s.split():
...     if ":" in i:
...         print i
...
Format:Pdf
Location:Tokyo

你可以做进一步的检查,通过再次拆分“:”并检查拆分列表中是否有2个元素,确保它真的是“someword:someword”。例如

>>> for i in s.split():
...     if ":" in i:
...         a=i.split(":")
...         if len(a) == 2:
...             print i
...
Format:Pdf
Location:Tokyo

答案 6 :(得分:-2)

([^:]+):(.+)

意义:(除了:一次或多次以外的一切),:,(任何一个角色一次或多次)

你会在网上找到好的手册......也许是你学习的时候......