【问题标题】:How to create a regex that checks the string contains specific pattern in javascript?如何创建一个正则表达式来检查字符串是否包含 javascript 中的特定模式?
【发布时间】:2017-04-25 12:25:04
【问题描述】:

我有一个需求,我需要遍历字符串并获得特定模式的第一次出现,如下所示,

i am a new **point**

如果出现两个连续的字符,它必须返回 true。

I must *not* be returned or*

上面的模式必须返回false。我试图在几个链接之后创建正则表达式,但是string.match方法总是返回null。 我的代码,

var getFormat = function(event) {
  var element = document.getElementById('editor');
  var startIndex = element.selectionStart;
  var selectedText = element.value.slice(startIndex);
  var regex = new RegExp(/(\b(?:([*])(?!\2{2}))+\b)/)
  var stringMatch = selectedText.match(regex);
  console.log('stringMatch', stringMatch);

}
<html>

<body>

  <textarea onclick='getFormat(event);' rows='10' cols='10' id='editor'></textarea>
</body>

</html>

由于我是 regex 的新手,我无法弄清楚我错在哪里。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    如果出现两个连续的字符,它必须返回 true。

    如果我理解正确的话。您只想检查一个字符串是否包含两个连续的字符,无论是哪个字符。那就够了:

    (.)\1
    

    Live Demo

    这当然是假设它实际上是任何字符。就像在两个连续的空格中一样,也是有效的匹配。

    如果您只需要检查是否有两颗星在彼此之后。那么你根本不需要正则表达式。

    s = "i am a new **point**";
    
    if (s.indexOf("**") != -1)
        // it's a match
    

    如果是因为你需要两颗星的开始结束

    begin = s.indexOf("**");
    end = s.indexOf("**", begin + 1);
    

    使用正则表达式的你可以这样做:

    ((.)\2)(.*?)\1
    

    Live Demo

    【讨论】:

    • 我必须检查字符串是否以 ** 或 _ 为界。如果仅以这些特殊字符为界,则它必须返回 true。
    • 有界?你的意思是在某事之前和之后是否有两套?因为如果是这样,我只是添加了一些与此相关的内容。
    猜你喜欢
    • 2013-11-19
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多