我正在尝试使用单个正则表达式替换html代码的不同部分。
例如,我有这样的文字:
option_!!NID!! [somme_text][5] some_text_option 5_option_some_text
使用此正则表达式:
content.replace(/(!!NID!!)|\[(\d)\]|(\d)_option/g, 1))
我希望得到:
option_1 [somme_text][1] some_text_option 1_option_some_text
但我有:
option_1 [somme_text]1 some_text_option 1_some_text
有人可以告诉我如何做我想要的,使用一个正则表达式?因为我不明白为什么替换不仅替换括号之间的目标。
谢谢:)
PS:我正在使用Ror,因此也可以使用ruby和JS解决方案。答案 0 :(得分:0)
整场比赛被替换。这意味着你需要以不同的方式处理案件:
"option_!!NID!! [somme_text][5] some_text_option 5_option_some_text".
replace(/!!NID!!/g, "1").
replace(/\d_option/g, "1_option").
replace(/\[\d\]/g, "[1]")
然后可以使用第二个案例的前瞻断言来组合第一个和第二个案例:
"option_!!NID!! [somme_text][5] some_text_option 5_option_some_text".
replace(/!!NID!!|\d(?=_option)/g, "1").
replace(/\[\d\]/g, "[1]")
答案 1 :(得分:0)
好的,我找到了解决方案。这是一个两步解决方案。
所以,一开始我有:
option_!!NID!! [somme_text][5] some_text_option 5_option_some_text
首先,我使用ruby方法String.gsub:
对我的字符串进行替换 str.gsub!(/\[(\d)\]|(\d_option)/) { |result| result.gsub(/\d/, '!!NID!!') }
在这一步之后,我有:
option_!!NID!! [somme_text][!!NID!!] some_text_option !!NID!!_option_some_text
我现在可以使用JS在客户端执行简单的替换。
content.replace(/(!!NID!!)/g, 1)
瞧瞧:)
我现在已经得到了预期的结果,避免了任何丑陋的JS线。
如果您知道一个,我仍在寻找更好的解决方案:)