Ваше регулярное выражение работает следующим образом:
найти space
то один символ, а затем другой space
, и удалить его. В этом случае пространство, которые окружают один символ не может быть подобрано в испытании другого персонажа, как и в случае
_a_b_c
^^^ -this part matches our pattern so it will be removed leaving
b_c and now neither `b` or `c` is surrounded with spaces so they will not
be removed
Чтобы решить эту проблему, просто включить в игре один или несколько пробелов (или начало строки) и один символ после этого как (^|\s+)\w
.
Кроме того, чтобы убедиться, что после этого символа на листе одно место (или конец строки), но чтобы не включать это пространство в соответствие, вы можете использовать механизм look-ahead, например (?=\s+|$)
.
Таким образом, в случае Java попробовать
String newString = yourString.replaceAll("(^|\\s+)\\w(?=\\s+|$)","");
и в JavaScript
var replaced = text.replace(/(^|\s+)\w(?=\s+|$)/g,"")
BTW \w
будет соответствовать любому символу из [a-zA-Z0-9_]
так что вы можете изменить его на что-то вроде [a-zA-Z]
, если вы хотите только буквы.
Должно ли быть «сыграно без« нет »и« нет »? Является ли первое пространство преднамеренным? – elclanrs
Показать код (как вы используете это регулярное выражение). –
Java или JavaScript? – nhahtdh