我有一个要求,我需要遍历字符串并获得第一次出现的特定模式,如下所示,
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的新手,我无法弄清楚我错在哪里。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
在出现两个连续字符时,它必须返回true。
如果我正确理解你。您只想检查一个字符串是否包含两个连续的字符,无论哪个字符。那应该就够了:
(.)\1
这当然是假设它确实是任何角色。因为两个连续的空格也是一个有效的匹配。
如果你只需要检查两颗星是否相继出现。那么你根本不需要正则表达式。
s = "i am a new **point**";
if (s.indexOf("**") != -1)
// it's a match
如果是因为你需要两颗星的开头和结束。
begin = s.indexOf("**");
end = s.indexOf("**", begin + 1);
你使用正则表达式可以这样做:
((.)\2)(.*?)\1