如何在不回头的情况下匹配“+abc”而不是“++abc”
How to match '+abc' but not '++abc' without lookbehind?
在类似于以下内容的句子中:
Lorem ipsum +dolor ++sit amet.
我想匹配+dolor
,但不想匹配++sit
.我可以通过回顾来做到这一点,但由于JavaScript
不支持它,我正在努力为它建立一个模式。
到目前为止,我已经尝试过:
(?:'+(.+?))(?=['s'.!'!]) - but it matches both words
(?:'+{1}(.+?))(?=['s'.!'!]) - the same here - both words are matched
令我惊讶的是,这样的模式:
(?='s)(?:'+(.+?))(?=['s'.!'!])
不匹配任何东西。我以为我可以把它骗出来并使用's
或以后的^
,在+
符号之前,但它似乎不是那样工作的。
编辑 - 背景信息:
这不一定是问题的一部分,但有时很高兴知道这一切有什么好处,所以澄清你的一些问题/评论一个简短的解释:
- 任何顺序中的任何单词都可以用
+
或++
标记 - 每个单词及其标记稍后将替换为
<span>
- 像 lorem+ipsum 这样的情况被认为是无效的,因为它就像拆分一个单词 (ro+om) 或将两个单词写成一个单词 (myroom),所以无论如何都必须更正(模式可以匹配这一点,但这不是错误)但是它至少应该匹配上面示例中的正常情况
- 我使用像
(?=['s'.!'!])
这样的前瞻,这样我就可以匹配任何语言的单词,而不仅仅是'w
的字符
一种方法是匹配一个额外的字符并忽略它(通过将匹配的相关部分放入捕获组中):
(?:^|[^+])('+[^'s+.!]+)
但是,如果潜在的匹配项可以直接彼此相邻,则这种情况就会崩溃。
在 regex101.com 上实时测试。
解释:
(?: # Match (but don't capture)
^ # the position at the start of the string
| # or
[^+] # any character except +.
) # End of group
( # Match (and capture in group 1)
'+ # a + character
[^'s+.!]+ # one or more characters except [+.!] or whitespace.
) # End of group
'+'+|('+'S+)
从捕获组 1 中获取内容。正则表达式使用此答案中描述的技巧。
正则表达式101演示
var re = /'+'+|('+'S+)/g;
var str = 'Lorem ipsum +dolor ++sit ame';
var m;
var o = [];
while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
if (m[1] != null) {
o.push(m[1]);
}
}
如果您有类似 +++donor
的输入,请使用:
'+'++|('+'S+)
以下正则表达式似乎对我有用:
var re = / ('+[a-zA-Z0-9]+)/ // Note the space after the '/'
演示
https://www.regex101.com/r/uQ3wE7/1
我认为这就是你需要的。
(?:^|'s)('+[^+'s.!]*)(?=['s.!])
只需尝试使用以下正则表达式:
(^|'s)'+'w+
相关文章:
- 用于匹配abc.com.amp;abc.com/.*
- 如何将特定json对象的值与几个条件相加(例如,对象“TYPE”的值为“ABC”)
- 我有一个外部 json 文件,比如 abc.json.因为它包含{“记住我”:“Acuérdate”}
- 隐藏<标签>abc标签>之间的文本 - 删除“ ABC”
- 如何在不回头的情况下匹配“+abc”而不是“++abc”
- Example of <iframe src= "view-source:http://www.abc.
- 对 id 像 'abc%' 的 dom 执行操作
- .NET MVC Bundler 总是缩小我的“abc.min.js”文件
- 让 Javascript 在以 ABC pdf 格式渲染 pdf 之前完成
- 如何在jquery函数$.each($(“abc”)内传递变量.
- TypeError:abc.getAttribute不是函数
- javascript.prototype.abc和javascript.prottype之间的区别
- 这个onclick(onclick=“this.name='abc'”)是什么意思
- 如何在<Div类=“;abc定义“;style='显示“>或者在<Div类=“;aB-cd-e
- 为什么'abc'.split(/(a|b|c)/)在Javascript中给出a、b、c和空字符串
- 如果url有特定的术语,比如/abc-def/usingjQuery,我必须删除特定的Cookie
- JavaScript点击具有值“”的所有输入;abc”;
- RegEx完全匹配^abc$dons'不起作用
- 为什么 “abcdef” 与 (?=abc)def 不匹配,但与 abc(?=def) 匹配
- Optimisation: ([abc] | [^abc])*