すでに回答を受け入れていますが、目的を達成するための代替手段は次のとおりです。
var str = "uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła",
output = str.replace(/\D/gi, function (a, b, c) {
if (a == 'x' && c.charAt(b-1) == ' ' && c.charAt(b+1) == ' ') {
return '.';
}
return '';
})
console.log(output); // => '53.1000'
JS フィドルのデモ。
また、代替の空白文字を文字の前後に配置できる更新されたアプローチx
:
var str = "uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła",
output = str.replace(/\D/g, function (a, b, c) {
if (a == 'x' && /\s/.test(c.charAt(b-1)) && /\s/.test(c.charAt(b+1))) {
return '.';
}
return '';
})
console.log(output);
JS フィドルのデモ。
上記の説明 (後者のコード スニペット):
/\D/
数字以外のすべての文字 ( 0 ~ 9 以外のすべて)に一致します。
g
- g
「グローバル」、最初の だけでなく、すべての出現に一致します。
function (a, b, c)
:
a
- は一致した文字そのものです。
b
- 文字列内でその文字が見つかったインデックスです。
c
- 作業中の文字列。
if (a == 'x' && /\s/.test(c.charAt(b-1)) && /\s/.test(c.charAt(b+1)))
:
a == 'x'
- 一致した文字が , であるかどうかのx
テスト
/\s/.test()
test()
- 正規表現をテストして、メソッドに渡された文字列と一致するかどうかを確認します。
c.charAt(b-1)
- インデックスを使用して、文字列内の一致した文字の前の文字を調べます。
c.charAt(b+1)
- 今回は、文字列内の次の文字を調べます。
- すべてが一致する場合(一致は
x
であり、前後の文字が両方とも空白である場合、.
文字を返します。
- それ以外の場合は、空の文字列を返します。
参考文献: