在每个单词中查找给定/特定字符的第一次出现

时间:2018-03-19 14:16:37

标签: javascript regex

stringi = "fuunnynsdfdn dfdfomdfdnd dfdfnntr ndfdf thatnfdfdfdfd"

我能够使regEx动态地在每个单词中找到每个字符X的最后一次出现:(我称之为动态,因为我只需要改变一个点)

(n)(?!(\w+?)?\1(\w+?)?)给出了

"fuunnynsdfdn dfdfomdfdnd dfdfnntr ndfdf thatnfdfdfdfd"
            ^          ^       ^   ^         ^

(d)(?!(\w+?)?\1(\w+?)?)给出了

"fuunnynsdfdn dfdfomdfdnd dfdfnntr ndfdf thatnfdfdfdfd"
           ^            ^   ^         ^              ^

问题:

我怎样才能获得动态的"正则表达式。这意味着我必须替换上面的一个地点给我:

some regEx with >>> n <<<给出了

"fuunnynsdfdn dfdfomdfdnd dfdfnntr ndfdf thatnfdfdfdfd"
    ^                  ^      ^    ^         ^

some regEx with >>> d <<<给出了

"fuunnynsdfdn dfdfomdfdnd dfdfnntr ndfdf thatnfdfdfdfd"
         ^    ^           ^         ^          ^

是否有可能与regEx相匹配,并且当我想匹配另一个角色时我只需更改一个位置?

请注意:

纯regEx,没有js字符串拆分等..

问题

随着我的后视,我遇到了固定长度的问题。

2 个答案:

答案 0 :(得分:2)

  

这意味着我必须更换一个地点

首先匹配.spinner { display: block; position: fixed; z-index: 1031; top: calc( 50% - ( ...px / 2) ); /* where ... is the element's height */ right: calc( 50% - ( ...px / 2) ); /* where ... is the element's width */ } 然后匹配其他所有内容:

n

n(\S*)

如果这是一个有趣的问题,因为Chrome有implemented lookbehinds(幸运的是看起来很无聊)你可以用这个正则表达式获得相同的结果:

var str = "fuunnynsdfdn dfdfomdfdnd dfdfnntr ndfdf thatnfdfdfdfd";
var char = 'n';
console.log(str.replace(new RegExp(char + '(\\S*)', 'g'), '*$1'));
var char = 'd';
console.log(str.replace(new RegExp(char + '(\\S*)', 'g'), '*$1'));

Live demo

答案 1 :(得分:1)

this regex demo中,使用javascript,lookbehind似乎没有固定的长度。所以这是正则表达式:

(?<=\b[^\Wd]*)d

说明:

  • \b是一个词障碍
  • [^d]*d找到非d个字符,然后找到d
  • [^\Wd]不是d,而是单词字符。即\W不是单词字符,因此[^\W]是单词字符。因此[^\Wd]是除d
  • 之外的每个单词字符
  • \b[^\Wd]*d会匹配每个单词的开头,直到第一个d。使用正确的结构,这可能就足够了。
  • (?<=...)是外观。