如何创建一个检查字符串的正则表达式包含javascript中的特定模式?

时间:2017-04-25 04:11:38

标签: javascript regex

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

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的新手,我无法弄清楚我错在哪里。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分: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