请问正则表达式(js),用$n 表示匹配到的部分,有办法突破 n 只能取 0-99 的限制吗

2021-12-30 15:51:59 +08:00
 shubei
1451 次点击
所在节点    程序员
12 条回复
66beta
2021-12-30 16:08:40 +08:00
给我整不会了,代码贴一下吧
dethan
2021-12-30 16:32:40 +08:00
会写这么长的表达式吗?
shubei
2021-12-30 16:38:04 +08:00
@66beta 不用代码呀,就是正则表达式可以$0 表示匹配到的部分, $n 表示用()包裹的 part ,实际使用发现只能用到$99
shubei
2021-12-30 16:39:52 +08:00
@dethan 一个富文本搜索的功能,用根据搜索词动态生成正则(过滤各种 html 标签)的办法搞得,目前没有长度显示
66beta
2021-12-30 16:43:31 +08:00
说说你要干啥吧,不要纠结语言本身的功能
jifengg
2021-12-30 16:46:25 +08:00
shubei
2021-12-30 16:49:02 +08:00
@66beta 大概就是在一个字符串里面搜索:
比如在 <\span>高<\/span>
<\span class="del">情<\/span>
<\span class="del">已<\/span>
<\span class="title"><\span class="add">逐<\/span><\span class="add">晓<\/span><\/span>
<\span>云</span>
<\span>空</span> 搜索’已逐‘


我目前就是根据搜索词动态生成正则:已(<span[^>]*>|</span>)*逐(<span[^>]*>|</span>)*
替换成
<span class='match'>已</span>$1<span class='match'>逐</span>$2
shubei
2021-12-30 16:58:09 +08:00
@jifengg 我擦 学习了
66beta
2021-12-30 17:15:03 +08:00
'<\span>高<\/span><\span class="del">情<\/span><\span class="del">已<\/span><\span class="title"><\span class="add">逐<\/span><\span class="add">晓<\/span><\/span><\span>云</span><\span>空</span>'.replace(/<[^<\/]*>(?=[已|逐])/gmi, '<\span class="match">')

=>

'<span>高</span><span class="del">情</span><span class="match">已</span><span class="title"><span class="match">逐</span><span class="add">晓</span></span><span>云</span><span>空</span>'
shubei
2021-12-30 17:28:15 +08:00
@66beta emm 正则新手,没看懂这个怎么把 match 的类加到前面的。但是应该是少了后 span 标签。

主要是已逐是作为一个词搜索的,不是或的关系
lululau
2021-12-30 18:47:09 +08:00
s.replace(REGEX, (_, ...g) => g[123]))
IvanLi127
2021-12-31 12:56:04 +08:00
设计者可能死都想不通你咋能用得了那么多😂

你这样用性能没问题吗😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/825330

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX